I had need to test an application built for Linux, and didn’t want to run a whole desktop in a window using Virtualbox. I found the bits I needed online in various forums, but nowhere was it all in one place. It is now!
Prerequisites: Docker and XQuartz. Both can be downloaded from homebrew.
Create a Dockerfile:
FROM debian:latest RUN apt-get update && apt-get install -y iceweasel RUN export uid=501 gid=20 && \ mkdir -p /home/user && \ echo "user:x:${uid}:${gid}:User,,,:/home/user:/bin/bash" >> /etc/passwd && \ echo "staff:x:${uid}:" >> /etc/group && \ echo "user ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers && \ chmod 0440 /etc/sudoers && \ chown ${uid}:${gid} -R /home/user USER user ENV HOME /home/user CMD /usr/bin/iceweasel
It’s good to mount the Downloads folder within /home/user, or your Documents, or whatever. On Catalina or later you’ll get warnings asking whether you want to give Docker access to those folders.
First time through, open XQuartz, goto preferences > Security and check the option to allow connections from network clients, quit XQuartz.
Now open XQuartz, and in the xterm type:
$ xhost + $YOUR_IP $ docker build -f Dockerfile -t firefox . $ docker run -it -e DISPLAY=$YOUR_IP:0 -v /tmp/.X11-unix:/tmp/.X11-unix -v $HOME/Downloads:/home/users/Downloads firefox
Enjoy firefox (or more likely, your custom app that you’re testing under Linux)!
Had to make this edit:
mkdir -p /home/user && \
And would only work with this command so far:
docker run -it -e DISPLAY=192.168.0.104:0 firefox
I.e., no -v options.
Still experimenting.
Much thanks!
Thank you! I’ve fixed the line in the Dockerfile. I don’t know why your -v isn’t working; what are you trying and what do you see?