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

我想在Docker容器中运行firefox(或任何graphics应用程序)。

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

尝试1:我从这里的例子开始https://hub.docker.com/r/devopsil/vnc-firefox/~/dockerfile/在这个例子中,开发人员通过CMD启动vnc服务器,并保持它永远运行。 他把Firefox作为.rc文件的一部分,以便在容器启动时启动。 如果你通过VNC客户端连接,你可以看到Firefox和预期closuresFirefox或断开VNC会话不会停止容器。

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

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

重build和运行容器“docker run –rm -p 5900”现在有不同的行为:容器启动,通过VNC客户端连接工作,几秒钟后打开firefox(等待消息“扩展RANDR丢失显示:20” ),closuresvnc连接后容器自动停止。

尝试3:然后,我创build了一个bash脚本来启动vncserver和firefox,并更改了Dockerfile将该脚本文件复制到映像中,并将脚本作为入口点。 但是我得到的错误类似于“显示variables未设置”

 #!/bin/bash /usr/bin/x11vnc -forever -usepw -create & firefox 

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

问题 :我不知道如何将由vncserver标志创build的虚拟显示“-create”添加到firefox中。 请让我知道在容器启动时启动GUI应用程序的最佳方法是什么,并在GUI应用程序closures时自动停止容器。 我相信dockerfile中的ENTRYPOINT应该设置为firefox。 谢谢你的帮助。

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

我设法find了解决办法:

更改了上面尝试3中的脚本,如下所示

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

干杯。