Osc*_*vis 3 containers headless xserver docker
我正在构建一个具有 Maven 和一些依赖项的 Docker 容器。然后它在容器内执行脚本。看起来,其中一个依赖项需要 Xserver 才能工作。屏幕上没有显示任何内容,但这似乎是必要且无法避免的。
我让它工作了,ENV DISPLAY=x.x.x.x:0
在 Dockerfile 上放置了一个,它连接到外部 Xserver 并且它工作了。但重点是让 Docker 成为一个自给自足的容器。
因此,我需要将 Xserver 添加到我的容器中,并在 Dockerfile 中添加必要的内容。我希望 Xserver 只能由 Docker 容器本身访问,而不能从外部访问。
FROM
我的 Dockerfile 的 是不可FROM ubuntu:15.04
更改的,因为我的 Dockerfile 有很多内容取决于该特定版本。
我读过一些关于如何从 docker 容器连接到 Docker 主机的 Xserver 的文章,如下所示。但正如我提出问题的标题一样,Docker 主机是无头的,并且没有 Xserver。
apt-get
要安装到容器中才能拥有 Xserver,最少需要安装哪些软件包?ENV DISPLAY=:0
. 它是否正确?docker run
?谢谢。
x11vnc
您可以在 docker 容器内安装并运行。我将向您展示如何使其在无头主机上运行并远程连接它以运行 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"]
Run Code Online (Sandbox Code Playgroud)
并构建一个docker image
名为vnc
:
docker build -t vnc .
Run Code Online (Sandbox Code Playgroud)
运行容器并记住将端口映射5900
到主机以进行远程连接(我在--net=host
这里使用):
docker run -d --name=vnc --net=host vnc
Run Code Online (Sandbox Code Playgroud)
现在你已经有了一个正在运行的容器x11vnc
,下载一个像realvnc这样的vnc客户端并尝试从本地连接<server_ip>:5900
,密码是在vncdocker
中设置的Dockerfile
,你将进入远程X屏幕并打开xterm
。如果执行的话env
会发现环境变量DISPLAY=:20
让我们转到 docker 容器并尝试打开另一个xterm
:
docker exec -it vnc bash
Run Code Online (Sandbox Code Playgroud)
然后在容器内执行以下命令:
DISPLAY=:20 xterm
Run Code Online (Sandbox Code Playgroud)
您的窗口中将弹出一个新的 xterm 窗口vnc client
。我想这就是您运行应用程序的方式。
笔记:
ubuntu 14
,但我猜该包类似于ubuntu 16
希望这可以帮助:-)
归档时间: |
|
查看次数: |
5171 次 |
最近记录: |