I created a shared directory to serve as a volume to hold project files. If left to the docker run command to create it, it'll be owned by root and part of the point of all of this is to not have files owned by root in my home directory.
Then I run blacktop's container, passing in my UID and GID to ensure I'm the owner of any files we create in the shared directory.
Normally when I've used --user
the programs in the container don't care that this UID has no name within the container. But, in this case, it did - I got messages saying User home directory does not exist
and Failed to find a supported JDK
. The "correct" way to deal with this would be to create a matching user in the container but, here, it seemed a lot easier to hack it by passing the host system's password and group files as read only volumes.
The host password and group files will overwrite those already in the container. In some cases may cause problems with users that should exist in the container vanishing. But it worked fine for me this time round.
--env DISPLAY=:0.0
was required to start Java. This was kinda odd as if it's not present Java complains that it can't write to display :0.0
... and if you say don't use the default (:0.0
) use :0.0
instead... everything works. My head is still spinning on that one.
We also need --net=host
so that Java will access the X11 display using it's host network address rather than Docker's virtual network. (better explanation to follow).