当前位置: 首页 > 知识库问答 >
问题:

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

宣煜
2023-03-14

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

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

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

尝试2:我如下调优了Dockerfile。仅更改了最后一行(将CMD替换为ENTRYPOINT,并删除了“永久”标志)

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

重建和运行容器“docker run--rm-p 5900”现在有了不同的行为:容器启动,通过VNC客户端的连接工作,firefox在几秒钟后打开(等待消息“extension RANDR missing on display:20”后),容器在关闭VNC连接后自动停止。

尝试3:然后我创建了一个bash脚本来启动vnc服务器和火狐,并更改了Dockerfile以将此脚本文件复制到映像中,并将脚本作为入口点。但我得到了类似于“显示变量未设置”的错误

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

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

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

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

共有2个答案

罗波鸿
2023-03-14

我正在使用以下Bash函数:

# Configure virtual display and wine.
# Usage: set_display
set_display() {
  export DISPLAY=${DISPLAY:-:0} # Select screen 0 by default.
  xdpyinfo &>/dev/null && return
  if command -v x11vnc &>/dev/null; then
    ! pgrep -a x11vnc && x11vnc -bg -forever -nopw -quiet -display WAIT$DISPLAY &
  fi
  ! pgrep -a Xvfb && Xvfb $DISPLAY -screen 0 1024x768x16 &
  sleep 1
  if command -v fluxbox &>/dev/null; then
    ! pgrep -a fluxbox && fluxbox 2>/dev/null &
  fi
  echo "IP: $(hostname -I) ($(hostname))"
}

然后文件并调用set_display。考虑通过-usepw配置密码。

我正在以下Docker项目中使用它(检查.funcs.cmds.inc.sh)。

另请检查:如何使Xvfb显示可见?

杨雪松
2023-03-14

我设法找到了解决办法:

将上面尝试3中的脚本更改如下

!/bin/bash

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

干杯

 类似资料:
  • 其基本思想是运行带有音频和ui的应用程序(vlc、firefox、skype…) 我在使用pulseaudio搜索docker容器,但我找到的所有容器都在TCP上使用pulseaudio流。(应用程序的安全沙箱) https://gist.github.com/hybris42/ce429de428e5af3a344a https://github.com/jlund/docker-chrome-

  • 问题内容: 我尝试在具有/tmp/.X11-unix装载的容器docker中运行一些Qt应用程序。我在这里看到 这可能很困难。 因此,当我在容器docker中运行kdevelop时,它不起作用(我有一个空窗口)。但是如果我运行qtcreator很好。 我认为差异来自Qt版本(kdevelop在Qt4和qtcreator在Qt5中开发)。我所有其他的qt5应用程序都可以正常工作,但在qt4中却没有一

  • 我正在尝试将.war、.aar、.xml和.properties文件部署到tomcat docker容器。我使用了下面的Dockerfile和基本的tomcat docker映像。 到目前为止一切正常。它提取war文件并启动容器内的应用程序。 但是现在我需要像这样添加/编辑“/usr/local/tomcat/webapps/root/web-inf//”和“/usr/local/tomcat/w

  • 我有一个react-app,它简单地显示hello-world消息,但我喜欢运行应用程序通过docker-container,但有这个问题。在此消息之后,进程停止,没有运行应用程序。 我不能理解我应该做什么,因为我有一个很小的应用程序,在Dockerfile中有基本代码 我需要安装webpack-dev-server吗,我尝试了,但得到了版本错误,如“手动添加服务器”的版本比已经安装的服务器低。所

  • 问题内容: 我正在尝试使用Windows 10作为主机并运行包含基于gui的应用程序的Docker容器,并使用X11转发或类似方式显示它们。我在网上发现了几乎所有有关Linux主机到Linux容器的信息(示例-http://fabiorehm.com/blog/2014/09/11/running- gui-apps-with-docker ),其中套接字/ x11权限被暴露。我发现的其他信息来自

  • 所以,我在Docker容器中运行了一些Python代码。我使用谷歌的gCloud脚本启动了我的本地环境。我看到了基本的访问风格日志和健康检查信息,但我不确定如何将我正在从Python应用程序编写的日志消息传递到控制台。有没有一个参数我可以设置来完成我的gCloud脚本,或者有什么我可以在Dockerfile中设置,可以帮助?