In God we trust; all others must bring data… attributed to W. Edwards Deming

Docker container + X11 on macOS = Awesome

I’ve been exploring dockerizaton lately more and more and I think I like the idea of having my apps in containers. I am not going to lie, it does take some time to get used to, but it is pretty cool the things that you can do.

One thing that I think I wanted to accomplish was able to run X11 apps through docker. I found Docker Headless VNC container and that was slick. Where I was able to run a whole Xfce environment within a Docker container!!! kudos to those folks. Now, my challenge was that in my case, I didn’t want a fat image and/or configure each app to download of configuring. So, this wasn’t my solution at this time. So, I decided to explore further and found a way to run X11 from a Docker container in macOS. Below are the steps on how to accomplish this.

Install socat which is a “multipurpose relay.” This will allow us to call the display.

1

brew install socat

Create you local Dockerfile. In this particular case, I am using Ubuntu latest (which at the time of this post is 16.04.1 LTS). On your terminal, you can do “vi Dockerfile” and paste the info from below in that file.

1

2

3

4

5

6

7

8

9

10

FROM ubuntu:latest

RUN apt-get update&&apt-get install-yfirefox

RUN useradd-ms/bin/bash developer&&\

echo"\ndeveloper ALL=(ALL) NOPASSWD: ALL">>/etc/sudoers

USER developer

ENV HOME/home/developer

CMD/usr/bin/firefox

Then, let’s build the Docker image by doing the following…

1

docker build-tfirefox.

Now, on a different terminal, run the following command…

1

socat TCP-LISTEN:6000,reuseaddr,fork UNIX-CLIENT:\"$DISPLAY\"

Then come back to your old terminal (or a different one) and run this command

1

2

3

4

docker run-ti--rm\

-eDISPLAY=$(ipconfig getifaddr en0):0\

-v/tmp/.X11-unix:/tmp/.X11-unix\

firefox

At this point, you should have opened a Firefox instance from your Docker container through X11 on macOS 🙂
If you didn’t… take a look at the steps again. Happy dev and opening other X11 instances.