docker - 如何在容器中執行 x 桌面?
我正在嘗試將我的 Linux 機器設置為執行多個來賓作業系統,其中一個是 Windows VM,另一個是 Linux 容器。這裡的目標是防止我弄亂主機系統,同時可以自由地操作基本作業系統並使用主機硬體。最終,除了在容器中執行我的桌面之外,我還希望執行圖形加速模擬等。由於 Docker 內置了非常好的類似 git 的容器版本控制,使用它似乎是個好主意。也許 libvirt 與 LXC 一樣好,但 docker 的特權模式使得不必為容器配置設備變得更容易。
我已經做了一些研究並提出了一些答案,但是我無法將它們放在一起。
LXC 的背景
從 LXC 執行 X幫助我了解如何使用(即)配置容器:
lxc.cgroup.devices.allow = c 226:0 rwm
並使用
mknod -m 666 dri/card0 c 226 0
在容器內連接到主機設備。
碼頭工人
來自cuda - Using GPU from a docker container,我看到我可以通過 LXC 後端在 Docker 中獲得相同的設置。
在我看來,如果 docker 容器在特權模式下執行,那麼它可以正常訪問 GPU,而無需此額外配置。所以,我啟動了一個基本系統,安裝了圖形驅動程序、xorg-server、xorg-xinit 和一個視窗管理器來測試它。
第一次嘗試
# startx Cannot run from a console (or some message like that)
好吧,我以為我在 tty2 上。
# tty /dev/console
這不是我所期望的。
# chvt 2 # tty /dev/tty2
好吧,它似乎奏效了。讓我們再試
# startx
一次。它啟動了視窗管理器,游標位於中心。沒有滑鼠反應。沒有鍵盤反應。讓我們嘗試用Ctrl-Alt+F3
. 沒有反應。好吧,看來我將不得不重新啟動冷。第二次嘗試
# tty /dev/console # chvt 2 # tty /dev/console
什麼?現在改不了了?
繼續
再次嘗試後,我得到了它來更改tty,並且startx再次凍結了電腦。
現在怎麼辦?
所以,我現在陷入了僵局。我真的希望能夠使用容器——首選 Docker,也可以使用帶有 libvirt 的 LXC——作為我的日常作業系統執行,同時保持精簡的主機作業系統。
最好在這裡使用具有特權模式的 Docker,還是使用顯式 LXC 後端並嘗試上面列出的選項?
我已經計劃使用 libvirt(可能在 vagrant-libvirt 下)來管理我的 Windows 虛擬機,那麼在這種情況下使用 libvirt 或 vagrant-LXC 對我來說是否差不多?
編輯:閱讀LXC vs. Docker,我覺得由於 Docker 和 Docker 容器適用於單一應用程序環境,也許最好使用 LXC 而不是 Docker 作為我的日常作業系統執行。想法?
編輯:我發現,像 docker 一樣,有一個 lxc-device 命令允許我繞過 cgroups 和 mknod 步驟。而在我能夠讓 x 啟動並凍結我的系統之前,它現在只是出錯了。也許我最終可以弄清楚這一點,因為似乎沒有人在那裡。
更新:我有滑鼠工作。在客戶機上,我安裝了 xf86-input-mouse 和 xf86-input-keyboard。在主機上,我執行了以下命令:
# lxc-device -n g1 add /dev/input/mice # lxc-device -n g1 add /dev/dri/card0 # lxc-device -n g1 add /dev/dri/controlD64 # lxc-device -n g1 add /dev/dri/renderD128 # lxc-device -n g1 add /dev/fb0 # lxc-device -n g1 add /dev/tty2
作品!
這個問題有我需要的答案。當然,我
lxc-device
在配置文件中使用而不是 cgroup 定義。但是,就我而言,如果我在不同的 tty 上啟動它,我只能讓鍵盤在 X 中工作。