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

问题描述 投票:2回答:2

我想在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并删除了“永远”标志“)

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变量但是然后错误无法打开显示。

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

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

docker dockerfile vnc xvfb
2个回答
3
投票

我设法找到了解决方案:

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

!/bin/bash

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

干杯。


0
投票

我正在使用以下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_display。考虑通过-usepw配置密码。

我在下面的Docker project中使用它(检查.funcs.cmds.inc.sh)。

检查:How to make Xvfb display visible?

© www.soinside.com 2019 - 2024. All rights reserved.