2015-11-07 78 views
1

我想爲GUI應用程序(例如Chrome)創建Docker鏡像,我希望此GUI應用程序可以在沒有安裝X服務器的裸Linux服務器上運行。在Docker容器中運行x-org時,鍵盤/鼠標無法響應

我知道爲X Window Client(GUI應用程序本身)創建並運行Docker鏡像非常簡單。這需要X服務器安裝並在主機上運行。

sudo docker run -ti -v /tmp/.X11-unix:/tmp/.X11-unix xorg xterm -display :0 

但是對於我來說,我需要X客戶端和服務器在Docker容器中運行。

這裏是我的dockerfile:

FROM ubuntu:14.04 
RUN apt-get update && apt-get install -y xorg 

而且我通過命令運行圖像:

sudo docker run -i -t --rm -e DISPLAY=:0 --privileged xorg xinit 

X服務器可以開始我的屏幕變黑,幾秒鐘後,xterm窗口顯示器。但是,我不能使用鍵盤和鼠標。屏幕好像freezen

我已經搜索並嘗試了很多解決方案,但沒有人能解決這個問題。 (虛擬x服務器不是我需要的)

+0

的[你能運行GUI應用中可能的複製碼頭集裝箱?](http://stackoverflow.com/questions/16296753/can-you-run-gui-apps-in-a-docker-container) –

+0

謝謝馬克!但我不需要在與主機x服務器連接的docker容器中或在容器中運行虛擬x服務器中運行GUI應用程序。 – Kriss

+0

我希望GUI應用程序顯示在主機的物理監視器上,並且Docker容器中的GUI應用程序和x服務器都是 – Kriss

回答

1

我已經解決了這個問題。

起初,我以爲docker容器中的x服務器可能無法訪問主機設備,我花了很多時間在LXC/cgroup上。例如,我將docker exec引擎更改爲LXC,並添加了選項'--lxc-conf='lxc.cgroup.devices.allow = c 13:* rwm',並且我還在容器中創建了/dev/input/*

所有這些操作都是不必要的。

如果我們在特權模式下運行docker容器,所有主機設備將自動添加。或者我們可以使用'--device=/dev/input/mice'等選項來共享主機設備。

真正的問題是x服務器無法自動發現和添加設備。我不知道爲什麼。但我們可以修改x服務器的配置並自定義設備。

添加文件/etc/X11/xorg.conf.d/10-input.conf

Section "ServerFlags" 
    Option "AutoAddDevices" "False" 
EndSection 

Section "ServerLayout" 
    Identifier  "Desktop" 
    InputDevice "Mouse0" "CorePointer" 
    InputDevice "Keyboard0" "CoreKeyboard" 
EndSection 

Section "InputDevice" 
    Identifier "Keyboard0" 
    Option "Device" "/dev/input/event2" 
EndSection 

Section "InputDevice" 
    Identifier "Mouse0" 
    Driver "mouse" 
    Option "Protocol" "auto" 
    Option "Device" "/dev/input/mice" 
    Option "ZAxisMapping" "4 5 6 7" 
EndSection 

和運行搬運工容器:

docker run -i -t -v /tmp/.X11-unix:/tmp/.X11-unix --rm --privileged ubuntu startx 
相關問題