This is very simple , we need to make some changes in ‘xhost’ so that docker container can use DISPLAY of the host .
Here I’ll be using Redhat linux as a host and centos image to launch docker container .
Now you might be thinking what is ‘xhost’ :-
If I give a simple definition then , the xhost command is a server access control program for X server . xhost command adds or deletes host names on the list of machines from which the X Server accepts connections. This command must be run from the machine with the display connection.
Now might be thinking what is ‘X server’ :-
X is an application that manages one or more graphics displays and one or more input devices (keyboard, mouse, etc.) connected to the computer.
It works as a server and can run on the local computer or on another computer on the network. Services can communicate with the X server to display graphical interfaces and receive input from the user.
As the above poster mentioned,
X is a server (meaning a program which other programs call upon and be called by) which is responsible for creating a graphical environment and if it fails for whatever reason, you'll be greeted by Command Line Interface (CLI).
If some ask me to define it in very brief then ‘ X server is program called by other program to provide them with a graphical screen’
Now we will see how can launch a graphical software( for eg. firefox ) on Docker container which provide us CLI :
Here we are using redhat linux as a host
First : we have run command ‘ echo $DISPLAY ’ why?
It is so because every graphical screen or DISPLAY has on number . We can find this number by running this command , which will help our CLI to know on which DISPLAY it can run itself .
Second: we have export our DISPLAY so that anyone can use it .
Third : then we run ‘xhost +’ we used it to allow any program to access our DISPLAY.
Fourth : Then we created a Dockerfile
Fifth : Here is our Dockerfile , in this we are defining that we are using centos image , updating our yum repo , installing( python3 , firefox , jupyter) , and defining that firefox is the graphical software we have to run
Sixth : Now we build or Dockerfile with command ‘ docker build -t gui:v1 . ’
Here gui is our image name (we can give any ), v1 is the version ( we can give any) and we have used ‘ . ’ to tell that we are running this command in place where we have Dockerfile .
Seventh : Now we launch our container using command ‘ docker run -ti
— —net=host — env=“DISPLAY” gui:v1 ’
Here we use net=host to define that container has to use host network , we defined env=“DISPLAY” which tells the container which display to use , we use image named by us as ‘gui’ and defined the version v1.
Finally we have achieved firefox gui on docker cli .
Thankyou everyone : )