Install depedent packages via Brew (one-time setup)
$ brew install socat
$ brew cask install xquartz
Setup XQuartz
# optionally, stop xQuartz opening XTerm (I find this behavior annoying)
$ defaults write org.macosforge.xquartz.X11 nolisten_tcp 0
$ defaults write org.macosforge.xquartz.X11 app_to_run /usr/bin/true
Setup environment
# setup using docker backed by virtualbox via DOCKER_HOST
$ eval $(docker-machine env) ; docker-machine ip
# start XQuartz session
$ open -a XQuartz
# Port forward x11 app (inside docker) request to XQuartz (on macos host)
$ socat TCP-LISTEN:6000,reuseaddr,fork UNIX-CLIENT:\"$DISPLAY\"
Using X11 App
$ docker run --rm -e DISPLAY=$(docker-machine ip):0 [image] [command]
$ export DISPLAY=192.168.99.1:0 # <-- YMMV, default for docker-machine with virtualbox deployment
# chrome (testing secure CSA cluster, modified /etc/krb5.conf)
$ docker run \
--rm \
--name chrome \
--net host \
--volume "${HOME}/Downloads:/root/Downloads" \
--volume "${HOME}/.config/google-chrome/:/data" \
--security-opt seccomp:unconfined \
--env "DISPLAY=192.168.99.1:0" \
jess/chrome -- bash
# firefox (testing secure CSA cluster, modified /etc/krb5.conf)
$ docker run -ti -e DISPLAY=192.168.99.1:0 jess/firefox
# intellij (professional features?)
$ docker run --rm \
-e DISPLAY=${DISPLAY} \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-v ~/.Idea:/home/developer/.Idea \
-v ~/.Idea.java:/home/developer/.java \
-v ~/.Idea.maven:/home/developer/.m2 \
-v ~/.Idea.gradle:/home/developer/.gradle \
-v ~/.Idea.share:/home/developer/.local/share/JetBrains \
-v ~/Project:/home/developer/Project \
--name idea-$(date +'%Y%m%d-%H%M%S') \
rycus86/intellij-idea-pro:latest
# pycharm
$ docker run --rm \
-e DISPLAY=${DISPLAY} \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-v ~/.PyCharm:/home/developer/.PyCharm \
-v ~/.PyCharm.java:/home/developer/.java \
-v ~/.PyCharm.py2:/usr/local/lib/python2.7 \
-v ~/.PyCharm.py3:/usr/local/lib/python3.7 \
-v ~/.PyCharm.share:/home/developer/.local/share/JetBrains \
-v ~/Project:/home/developer/Project \
--name pycharm-$(date +'%Y%m%d-%H%M%S') \
rycus86/pycharm-pro:latest
$ docker run --rm -e DISPLAY=192.168.99.1:0 davechick/arduino-dev arduino
See moby/moby#8710 for more info