在Docker容器中运行x-org时,键盘/鼠标无法响应
问题描述:
我想为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服务器不是我需要的)
答
我已经解决了这个问题。
起初,我以为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
的[你能运行GUI应用中可能的复制码头集装箱?](http://stackoverflow.com/questions/16296753/can-you-run-gui-apps-in-a-docker-container) –
谢谢马克!但我不需要在与主机x服务器连接的docker容器中或在容器中运行虚拟x服务器中运行GUI应用程序。 – Kriss
我希望GUI应用程序显示在主机的物理监视器上,并且Docker容器中的GUI应用程序和x服务器都是 – Kriss