将xserver添加到Docker容器(主机是无头的)

我正在构build一个有Maven和一些依赖关系的Docker容器。 然后在容器中执行一个脚本。 看来,其中一个依赖关系需要一个Xserver的工作。 没有任何东西显示在屏幕上,但似乎有必要,无法避免。

我得到它在Dockerfile上放置一个ENV DISPLAY=xxxx:0 ,它连接到外部Xserver,它的工作原理。 但关键是要制造一个Docker自给自足的容器。

所以我需要添加一个Xserver到我的容器中添加必要的Dockerfile。 我希望Xserver只能由Docker容器本身访问,而不能在外部访问。

我的Dockerfile的FROM ubuntu:15.04FROM 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立一个名为vncdocker 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

希望这可以帮助:-)