Virtual-Machine

Docker 如何執行 GUI?

  • March 12, 2019

我編寫了一些 Java 桌面應用程序,並認為我應該使用 Docker 執行它們來了解容器。

我將 Java 應用程序放入帶有 ubuntu 映像的 Docker 容器中。那時我意識到我需要讓 Docker 能夠訪問我的 DISPLAY 變數,以便 GUI 工作/訪問我電腦的 I/O。連接後,我可以執行 docker 容器並在我的電腦螢幕上看到 GUI 彈出。

這就是我開始感到困惑的地方。如果我在 VirtualBox 中執行桌面 GUI,我可以在虛擬機中看到 gui;它在虛擬電腦上。然後有一些智能的東西可以將 vm I/O 連接到我本地機器的 I/O。這對我來說很有意義。

但是 Docker 是如何讓 GUI 回到我的實際電腦上的呢?當我執行容器時,我可以在我的實際電腦上看到 GUI(而不是像 virtualbox 這樣的 vm)。但是 GUI 本身是如何在主機上呈現的呢?當我與主機共享 I/O 時,是否允許 Docker 將 GUI 文件發送回主機以顯示 GUI?還是我在用 ubuntu 鏡像創建容器的時候基本上是創建了一個虛擬機?

如果你在 Linux 上,在你的 docker 中掛載 /tmp/.X11-unix(啟動命令中的選項:-v /tmp/.X11-unix:/tmp/.X11-unix),你將能夠顯示任何沒有任何其他選項的 GUI 類型。與 docker 共享此文件允許使用任何類型的 GUI。

如果您不想這樣做,您可以以 Linux 普通使用者的身份輸入 xhost+ 命令,然後從 Docker 使用 export DISPLAY=IP:0.0 (或任何需要但 IP 不能是 127.0.0.1 即使在本地)。

xhost+ 允許任何主機,導出 DISPLAY 共享“遠端”機器上的顯示。

如果您在 Windows localhost 上執行 docker,所有埠基本上都已打開,但您需要特定的 Xserver 才能在 Windows 桌面上顯示 Ubuntu(VcXsrv 是您的朋友,因為它是使用 Visual C++ 2012 編譯的特定 X Server)和命令導出DISPLAY=IP:0.0 應該在啟動 GUI 之前發出。

引用自:https://unix.stackexchange.com/questions/505647