docker - 在 Docker 容器中使用 VNCserver + GUI 应用程序 + 虚拟显示

标签 docker dockerfile vnc xvfb

我想在 docker 容器中运行 Firefox(或任何图形应用程序)。

我的需求:当我启动容器时,我应该创建一个虚拟显示,启动 VNC 服务器,然后启动 GUI 应用程序。这意味着在容器成功启动后,我可以通过 VNC 客户端连接到容器内运行的 GUI 应用程序。当我关闭应用程序时,容器应该自动停止。

尝试 1:
我从这里的例子开始 https://hub.docker.com/r/devopsil/vnc-firefox/~/dockerfile/
在此示例中,开发人员通过 CMD 启动 vnc 服务器并使其永远运行。他将 firefox 作为 .rc 文件的一部分,以便在容器启动时启动。如果您通过 VNC 客户端连接,您可以看到 firefox,并且按预期关闭 Firefox 或断开 VNC session 不会停止容器。

尝试 2:
我按如下方式调整了 Dockerfile。只更改了最后一行(用 ENTRYPOINT 替换了 CMD 并删除了“永远”标志)

ENTRYPOINT ["/usr/bin/x11vnc", "-usepw", "-create"]

重建和运行容器“docker run --rm -p 5900”现在有不同的行为:
容器启动,通过 VNC 客户端的连接工作,火狐在几秒钟后打开(等待消息“显示 :20 上缺少扩展 RANDR”)并且容器在关闭 vnc 连接后自动停止。

尝试 3:
然后我创建了一个 bash 脚本来启动 vncserver 和 firefox 并更改 Dockerfile 以将这个脚本文件复制到镜像中,并将脚本作为入口点。但是我收到了类似于“未设置显示变量”的错误
#!/bin/bash
/usr/bin/x11vnc -forever -usepw -create &
firefox

尝试 4:
所以我通过 docker run 命令传递了 DISPLAY 变量,但是错误是无法打开显示。

问题 : 不知道怎么把vncserver标志“-create”创建的虚拟显示给firefox。请让我知道在容器启动时启动 GUI 应用程序并在 GUI 应用程序关闭时自动停止容器的最佳方式。我相信 dockerfile 中的 ENTRYPOINT 应该设置为 firefox。谢谢你的帮助。

我见过这个 https://blog.jessfraz.com/post/docker-containers-on-the-desktop/但这对我没有用,因为我想通过 VNC 远程访问应用程序。

最佳答案

我设法找到了解决方案:

更改了 中的脚本尝试 3 以上如下工作

!/bin/bash

Xvfb :1 -screen 0 800x600x16 &
/usr/bin/x11vnc -display :1.0 -usepw &
DISPLAY=:1.0
export DISPLAY
firefox

干杯。

关于docker - 在 Docker 容器中使用 VNCserver + GUI 应用程序 + 虚拟显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36221215/

相关文章:

linux - 任务退出后从cgroup中移除

remote-desktop - 基于网络的 NX 客户端?

java - Jconsole 远程可执行 Jar 文件

docker - 如何停止已部署的 docker 堆栈?

postgresql - Docker-compose 环境变量

docker - Web API端点可与docker-compose.yml一起使用,但不适用于仅使用Dockerfile进行构建和运行的情况

docker - 构建 Dockerfile 时是什么导致缓存失效?

docker - 通过合并 2 个镜像来创建 docker 镜像

linux - 在基于 Debian 的 Docker 镜像中安装 NVM 时发生错误替换错误

iphone - 交替控制+拖动以在 xCode 界面生成器中将 View 元素与文件所有者连接?