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.internalname 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
- 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 is
So-and-So's Computer, you will need to do some fancy quoting and escaping).
- Set your DISPLAY environment variable to
- Test it from your Mac with
- It works? Cool, one step fancier, from a container:
docker run --rm -e DISPLAY=host.docker.internal:0 -it some-container-name xeyes