使用VNCserver+;图形用户界面应用程序&x2B;Docker容器中的虚拟显示

使用VNCserver+;图形用户界面应用程序&x2B;Docker容器中的虚拟显示,docker,dockerfile,vnc,xvfb,Docker,Dockerfile,Vnc,Xvfb,我想在docker容器中运行firefox(或任何图形应用程序) 我的要求:启动容器时,我应该创建一个虚拟显示,启动VNC服务器,然后启动GUI应用程序。这意味着容器成功启动后,我可以通过VNC客户端连接到容器内运行的GUI应用程序。当我关闭应用程序时,容器应该自动停止 尝试1: 我从这里的例子开始 在本例中,开发人员通过CMD启动vnc服务器并使其永远运行。他将firefox作为.rc文件的一部分,以便在容器启动时启动。如果您通过VNC客户端连接,您可以看到firefox,并且正如预期的那样,

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

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

尝试1: 我从这里的例子开始 在本例中,开发人员通过CMD启动vnc服务器并使其永远运行。他将firefox作为.rc文件的一部分,以便在容器启动时启动。如果您通过VNC客户端连接,您可以看到firefox,并且正如预期的那样,关闭firefox或断开VNC会话不会停止容器

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

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

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

#!/bin/bash
/usr/bin/x11vnc -forever -usepw -create &
firefox
尝试4: 因此,我通过docker run命令传递了DISPLAY变量,但错误是无法打开DISPLAY

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


我已经看到了这一点,但这对我没有用,因为我想通过VNC远程访问应用程序。

我找到了解决方案:

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

!/bin/bash

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

干杯。

我正在使用以下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))"
}
然后
source
打开文件并调用
set\u display
。考虑通过密码> -USPW<<代码>配置密码。< /P> 我在下面使用它(选中
.funcs.cmds.inc.sh


同时检查:

也许我们可以运行
/usr/bin/x11vnc-display:1.0-usepw-forever&
# 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))"
}