在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應用程式,並在螢幕上顯示和與它們互動。

更新於:2020年10月1日

421 次瀏覽

啟動您的職業生涯

透過完成課程獲得認證

開始
廣告
© . All rights reserved.