There is a longstanding issue/missing feature/bug with sockets on Docker on macOS; it may never work; you'll need to use a network connection between Docker containers and X11 on macOS for the foreseeable future.
I started from this gist and made some adjustments:
- the volume mappings aren't relevant/used, due to the socket issue above.
- this method only allows X11 connections from your Mac, not the entire local network, which would include everyone on the café/airport WiFi.
- updated to include using the
host.docker.internal
name for the the container host, instead. - you have to restart XQuartz after the config change.
- you have a docker image with
x11-apps
(or the equivalent for not-ubuntu) installed - you have XQuartz installed (ie from Homebrew,
brew cask install xquartz
) and your PATH updated to include/opt/X11/bin
and/or/usr/X11/bin
.
- Launch XQuartz. Under the XQuartz menu, select Preferences
- Go to the security tab and ensure "Allow connections from network clients" is checked.
- Restart XQuartz.
- Make sure X11 is accepting connections from your host with
xhost +$(hostname).local
(if your Mac's name isSo-and-So's Computer
, you will need to do some fancy quoting and escaping). - Set your DISPLAY environment variable to
:0
, egexport DISPLAY=:0
. - Test it from your Mac with
xeyes
. - It works? Cool, one step fancier, from a container:
docker run --rm -e DISPLAY=host.docker.internal:0 -it some-container-name xeyes
Unfortunately, this is not working for me.
How can I get it to work without using
xhost + localhost
every time?