Running GUI Applications on Docker in Linux

21 Oct, 2020
Let’s say you are trying to build a UI application and deploying it as a Docker Container. If you want that UI application to display the user interface on your local machine while running the application inside the Docker Container, you will have to connect the display of the Docker Container with the display of your local machine. Let’s suppose you want to run Mozilla Firefox inside a Docker Container but you want to access the Firefox browser on your local machine. You can do this using some simple steps that we are going to discuss in this article.
Skimming through the entire process, you need to forward the X11 socket of your local Linux machine to the Docker Container for it to use directly. Along with this, you also need to forward the environment variable called display. After that, you need to set the permissions for the server host. Let’s run through these steps along with the code.
Create a dockerfile with the following code.
FROM ubuntu:latest
RUN apt-get -y update
RUN apt-get -y install firefox
RUN apt-get -y install xauth

EXPOSE 8887
CMD firefox


The above dockerfile contains the sequence of instructions to create an Ubuntu base image, runs an apt update on it, installs Xauth and Firefox. It then exposes port 8887 and runs Firefox. Xauth simply allows Docker Containers to access the Display Servers.
On your local machine, get the cookie value using the following command.
xauth list


Authorization Cookie
Copy the output which would be of the form  as shown below:
<username>/unix:  MIT-MAGIC-COOKIE-1  f1fa006c1e51fa8386209f85c57947c4


Create the Docker Image using the following command.
docker build -t <image-name> .


Docker build command
Run the Docker Image using the Docker run command.
docker run -it --net=host -e DISPLAY -v /tmp/.X11-unix <image-name> bash


Docker run command
The Docker image is now built and the Container is started. It pops up an interactive Ubuntu bash.
You need to add the cookie copied in the previous step using the following command.
xauth add <cookie>
xauth list


Adding Cookie
The list command will verify that the cookie has been added successfully.
6. Run the Firefox Instance from the bash
To run a Firefox instance, simply type “firefox” inside the bash. You will find that the Firefox browser pops up on your local machine even though it is running inside the Docker Container. Using a similar process, you can run almost any user interface application inside Docker Containers and access it on your local machine.
Running Firefox Instance
To conclude, in this article we saw how to create a Docker Image using the dockerfile, build and run the image. We also discussed how to connect the display of the Docker Container to the display of the local machine and accessed a UI application running inside Container on the local machine.
Docker Container
linux
Linux-Unix
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Docker - COPY Instruction
scp command in Linux with Examples
chown command in Linux with Examples
SED command in Linux | Set 2
nohup Command in Linux with Examples
mv command in Linux with examples
chmod command in Linux with examples
Array Basics in Shell Scripting | Set 1
Introduction to Linux Operating System
Basic Operators in Shell Scripting