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

时间:2017-03-08 08:47:29

标签: docker containers headless xserver

我正在构建一个具有maven和一些依赖关系的Docker容器。然后它在容器内执行一个脚本。看来,其中一个依赖项需要一个Xserver才能工作。屏幕上没有显示任何内容,但这似乎是必要的,无法避免。

我让它在Dockerfile上放置一个ENV DISPLAY=x.x.x.x:0并且它连接到外部Xserver并且它可以工作。但重点是使Docker自给自足的容器。

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

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

我已经阅读了一些关于如何从Docker容器连接到Docker主机的Xserver的帖子,比如this。但是当我提出问题的标题时,Docker主机是无头的,没有Xserver。

  • 安装到容器中的最小apt-get包是哪个包含Xserver?
  • 我想在我的Dockerfile中需要显示环境var ENV DISPLAY=:0。这是对的吗?
  • 是否还需要在docker run命令中添加其他内容?

谢谢。

1 个答案:

答案 0 :(得分:3)

您可以在docker容器中安装并运行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 image的<{1}}:

vnc

运行一个容器并记住地图端口docker build -t vnc . 以托管远程连接(我在这里使用5900):

--net=host

现在你有一个内置docker run -d --name=vnc --net=host vnc 的正在运行的容器,下载像realvnc这样的vnc客户端并尝试从本地连接到x11vnc,密码是<server_ip>:5900,这是在vncdocker中设置,您将在Dockerfile打开的情况下进入远程X屏幕。如果您执行xterm并找到环境变量env

让我们转到docker容器并尝试打开另一个DISPLAY=:20

xterm

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

docker exec -it vnc bash

将在DISPLAY=:20 xterm 窗口中弹出一个新的xterm窗口。我想这就是你运行应用程序的方式。

注意

  • 基本vnc图片基于vnc client,但我认为ubuntu 14
  • 中的包相似
  • 如果您不想要远程连接,请不要暴露5900

希望这可以提供帮助:-)