我正在构建一个具有maven和一些依赖关系的Docker容器。然后它在容器内执行一个脚本。看来,其中一个依赖项需要一个Xserver才能工作。屏幕上没有显示任何内容,但这似乎是必要的,无法避免。
我让它在Dockerfile上放置一个ENV DISPLAY=x.x.x.x:0
并且它连接到外部Xserver并且它可以工作。但重点是使Docker自给自足的容器。
所以我需要在我的容器中添加一个Xserver,并在Dockerfile中添加必要的内容。我希望Xserver只能由Docker容器本身访问,而不是外部访问。
我的Dockerfile的FROM
是FROM ubuntu:15.04
,这是不可更改的,因为我的Dockerfile有很多东西,具体取决于特定版本。
我已经阅读了一些关于如何从Docker容器连接到Docker主机的Xserver的帖子,比如this。但是当我提出问题的标题时,Docker主机是无头的,没有Xserver。
apt-get
包是哪个包含Xserver?ENV DISPLAY=:0
。这是对的吗?docker run
命令中添加其他内容?谢谢。
答案 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 client
,但我认为ubuntu 14
希望这可以提供帮助:-)