将xserver添加到Docker容器(主机是无头的)
我正在构build一个有Maven和一些依赖关系的Docker容器。 然后在容器中执行一个脚本。 看来,其中一个依赖关系需要一个Xserver的工作。 没有任何东西显示在屏幕上,但似乎有必要,无法避免。
我得到它在Dockerfile上放置一个ENV DISPLAY=xxxx:0
,它连接到外部Xserver,它的工作原理。 但关键是要制造一个Docker自给自足的容器。
所以我需要添加一个Xserver到我的容器中添加必要的Dockerfile。 我希望Xserver只能由Docker容器本身访问,而不能在外部访问。
我的Dockerfile的FROM ubuntu:15.04
是FROM ubuntu:15.04
,这是不可改变的,因为我的Dockerfile有很多东西取决于特定的版本。
我已经阅读了一些关于如何从Docker容器连接到Docker主机的Xserver的post,像这样 。 但是,由于我提出问题的标题,Docker主机是无头的,没有Xserver。
- 这将是最小的
apt-get
包安装到容器有一个Xserver? - 我想在我的Dockerfile将需要显示环境var像
ENV DISPLAY=:0
。 它是否正确? - 是否需要在
docker run
命令中添加其他内容?
谢谢。
您可以在x11vnc
容器中安装并运行x11vnc
。 我将告诉你如何使它在无头主机上运行,并远程连接它来运行X应用程序(例如xterm)。
Dockerfile:
FROM joprovost/docker-x11vnc RUN mkdir ~/.vnc && touch ~/.vnc/passwd RUN x11vnc -storepasswd "vncdocker" ~/.vnc/passwd EXPOSE 5900 CMD ["/usr/bin/x11vnc", "-forever", "-usepw", "-create"]
并build立一个名为vnc
的docker image
:
docker build -t vnc .
运行一个容器,并记住地图端口5900
主机进行远程连接(我在这里使用--net=host
):
docker run -d --name=vnc --net=host vnc
现在你有一个运行x11vnc
容器,下载一个像realvnc这样的vnc客户端,并尝试从本地连接到<server_ip>:5900
,密码是在Dockerfile
设置的Dockerfile
,你将会进入远程X界面xterm
打开。 如果执行env
,将会find环境variablesDISPLAY=:20
让我们去docker容器并尝试打开另一个xterm
:
docker exec -it vnc bash
然后在容器中执行下面的命令:
DISPLAY=:20 xterm
一个新的xterm窗口将在你的vnc client
窗口中popup。 我想这就是你要运行你的应用程序的方式。
注意 :
- 基本的VNC图像是基于
ubuntu 14
,但我猜这个软件包在ubuntu 16
是相似的 - 如果您不想远程连接,请不要暴露5900
希望这可以帮助:-)