我想在 docker 容器内运行 firefox (或任何图形应用程序)。
我的要求:当我启动容器时,我应该创建一个虚拟显示,启动 VNC 服务器,然后启动 GUI 应用程序。这意味着容器成功启动后,我可以通过 VNC 客户端连接到容器内运行的 GUI 应用程序。当我关闭应用程序时,容器应该自动停止。
尝试1:我从这里的例子开始https://hub.docker.com/r/devopsil/vnc-firefox/~/dockerfile/在此示例中,开发人员通过 CMD 启动 vnc 服务器并使其永远运行。他将 firefox 作为 .rc 文件的一部分,以便它在容器启动时启动。如果您通过 VNC 客户端连接,您可以看到 Firefox,并且按预期关闭 Firefox 或断开 VNC 会话不会停止容器。
尝试2:我按如下方式调整了 Dockerfile。仅更改了最后一行(将 CMD 替换为 ENTRYPOINT 并删除了“永远”标志”)
ENTRYPOINT ["/usr/bin/x11vnc", "-usepw", "-create"]
重建并运行容器“docker run --rm -p 5900”现在有不同的行为:
容器启动,通过 VNC 客户端的连接工作,几秒钟后打开 Firefox(在消息“显示扩展名 RANDR 丢失:20”后等待),并且容器在关闭 VNC 连接后自动停止。
尝试3:然后我创建了一个 bash 脚本来启动 vncserver 和 firefox,并更改了 Dockerfile 以将此脚本文件复制到映像中,并将该脚本作为入口点。但我收到类似于“显示变量未设置”的错误
#!/bin/bash
/usr/bin/x11vnc -forever -usepw -create &
firefox
尝试4:所以我通过 docker run 命令传递了 DISPLAY 变量,但错误是无法打开显示。
Question: 我不知道如何像firefox上的vncserver标志“-create”创建的虚拟显示一样。请让我知道在容器启动时启动 GUI 应用程序并在 GUI 应用程序关闭时自动停止容器的最佳方式是什么。我相信 dockerfile 中的 ENTRYPOINT 应该设置为 firefox。感谢您的帮助。
我见过这个https://blog.jessfraz.com/post/docker-containers-on-the-desktop/但这对我来说没有用,因为我想通过 VNC 远程访问该应用程序。