2017-03-08 36 views
1

我建立具有Maven和一些相关性的泊坞窗容器。然后它在容器中执行一个脚本。看来,其中一个依赖项需要Xserver才能工作。屏幕上没有显示任何内容,但似乎有必要并且无法避免。添加到的Xserver泊坞容器(主机是无头)

我得到它的工作将在Dockerfile的ENV DISPLAY=x.x.x.x:0并将其连接到外部的Xserver和它的作品。但关键是要制作一个Docker自给式容器。

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

我的Dockerfile的FROMFROM ubuntu:15.04,这是不可改变的,因为我的Dockerfile有很多东西取决于特定版本。

我读过一些职位有关如何从泊坞窗容器连接到多克尔主机的Xserver的,像this。但是当我提出问题的标题时,Docker主机是无头的,并没有Xserver。

  • 这将是最小的apt-get包安装到容器有一个Xserver?
  • 我想在我的Dockerfile中将需要像ENV DISPLAY=:0这样的显示环境var。它是否正确?
  • 是否需要在docker run命令中添加其他内容?

谢谢。

回答

2

您可以安装和运行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"] 

,并建立一个名为docker imagevnc

docker build -t vnc . 

运行的容器,并记住端口映射到5900主机进行远程连接(我使用--net=host这里) :

docker run -d --name=vnc --net=host vnc 

现在你有一个x11vnc内运行的容器,下载一个VNC客户端像realvnc并尝试连接到<server_ip>:5900从本地,密码为vncdocker这是在Dockerfile设置,你会来远程X屏幕与xterm开放。如果执行env并找到环境变量DISPLAY=:20

让我们去到码头工人的容器,并尝试打开另一个xterm

docker exec -it vnc bash 

内。然后容器执行以下命令:

DISPLAY=:20 xterm 

一个新的xterm窗口将在您的vnc client窗口中弹出。我想这就是你要运行你的应用程序的方式。

注意

  • 基础VNC图像是基于ubuntu 14,但我想包在ubuntu 16
  • 类似不要暴露5900如果你不想远程连接到网络,

希望这可以帮助:-)