我希望在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如下。仅更改了最后一行(使用ENTRYPOINT替换CMD并删除“永久”标志)
重新构建并运行容器“docker run --rm -p 5900 ”现在有了不同的行为: 容器启动,通过VNC客户端连接成功,等待几秒钟后Firefox打开(在“显示:20”上等待“扩展RANDR缺失”消息后),并且在关闭VNC连接后容器会自动停止。
尝试3: 然后我创建了一个bash脚本来启动vncserver和firefox,并更改了Dockerfile以将此脚本文件复制到镜像内部,并将脚本作为入口点。但是,我收到了类似于“未设置显示变量”的错误。
尝试4:我通过docker run命令传递了DISPLAY变量,但是错误显示无法打开显示器。 问题:我不知道如何将vncserver标志“-create”创建的虚拟显示器与Firefox连接起来。请告诉我在容器启动时启动GUI应用程序并在GUI应用程序关闭时自动停止容器的最佳方法。我相信dockerfile中的ENTRYPOINT应该设置为Firefox。感谢您的帮助。 我看过这篇文章https://blog.jessfraz.com/post/docker-containers-on-the-desktop/,但对我没有用,因为我想通过VNC远程访问应用程序。
ENTRYPOINT ["/usr/bin/x11vnc", "-usepw", "-create"]
重新构建并运行容器“docker run --rm -p 5900 ”现在有了不同的行为: 容器启动,通过VNC客户端连接成功,等待几秒钟后Firefox打开(在“显示: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远程访问应用程序。
/usr/bin/x11vnc -display :1.0 -usepw -forever &
。 - so61pi