在Linux的Docker中執行GUI應用程式
假設您正在構建一個需要使用者介面並在執行指令碼時彈出視窗的應用程式。並且假設您想在Docker容器內執行該指令碼。現在,您可能期望Docker容器為您執行UI應用程式並在螢幕上顯示相同的內容。但是,使用普通的docker run命令,您將無法看到或與UI應用程式互動。為此,您需要將顯示器與容器連線起來。在本文中,我們將討論如何做到這一點。
在這裡,我們將看到如何在Docker容器內執行Firefox例項並在您的主機上與它互動。為此,我們需要首先將X11套接字轉發到容器,以便容器可以直接使用它。我們還需要轉發顯示環境變數。即使這樣做了,也可能會失敗,因為我們還沒有為X伺服器主機設定許可權。這乍一看似乎是一項艱鉅的任務。我們將在本文中引導您完成所有步驟。
讓我們首先看一下Dockerfile,它將幫助我們構建映象。
# Set ubuntu as base image FROM ubuntu # Install dependencies RUN apt-get -y update RUN apt-get -y install xauth RUN apt-get -y install firefox #Expose a port number EXPOSE 8887 # Run firefox CMD /usr/bin/firefox
我們已經拉取了ubuntu作為基礎映象。之後,在新形成的ubuntu映象上執行更新。這也會形成一個新的中間層。使用給定的命令安裝xauth和firefox。Xauth是一種簡單的機制,它允許Docker容器訪問對X伺服器(也稱為顯示伺服器)的控制。但是,我們需要手動新增一個隨機生成的cookie,用於當前執行X伺服器的會話。
要訪問cookie,請在主機上執行以下命令。
xauth list
輸出格式為:
username/unix:0 MIT-MAGIC-COOKIE-1 8fe8efc75454dbf178bbe00442689406
使用者名稱將是您的系統使用者名稱。複製上面的輸出。
您現在可以使用上面建立的Dockerfile使用以下命令嘗試構建Docker映象。
sudo docker run -ti --net=host -e DISPLAY -v /tmp/.X11-unix <IMAGE NAME> bash
這將開啟已建立的ubuntu映象的bash。
在bash中,執行以下命令。
xauth add <之前複製的輸出>
使用此命令驗證主機系統是否已連線到遠端系統:xauth list
執行命令:/usr/bin/firefox
這應該開啟一個在容器內執行但在螢幕上顯示的Firefox視窗。
請注意,如果出現諸如{無法連線到顯示“−1”}之類的錯誤,則需要將您之前複製的token中的−0替換為−1。
執行類似的步驟,您將能夠在Docker容器內執行任何GUI應用程式,並在螢幕上顯示和與它們互動。
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP