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
@MohammadJavadD I think it depends on what you are trying to simplify. For many technical projects (you seem to be in university, for example), it likely makes sense to focus on one development platform and this is a way to that. By the end of 2021, Windows 10 has WSLg so Linux GUIs can be run ”just so”. That leaves macOS, the instructions for which are here.