你可以在 Linux Docker 容器中运行 GUI 应用程序吗?

新手上路,请多包涵

如何在 Linux Docker 容器中运行 GUI 应用程序?

是否有任何图像设置 vncserver 或其他东西,以便您可以 - 例如 - 在 Firefox 周围添加一个额外的减速沙箱?

原文由 Will 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 838
2 个回答

您可以简单地安装 vncserver 和 Firefox :)

我在这里推送了一个图像,vnc/firefox: docker pull creack/firefox-vnc

镜像是用这个 Dockerfile 制作的:

 # Firefox over VNC
#
# VERSION               0.1
# DOCKER-VERSION        0.2

FROM    ubuntu:12.04
# Make sure the package repository is up to date
RUN     echo "deb http://archive.ubuntu.com/ubuntu precise main universe" > /etc/apt/sources.list
RUN     apt-get update

# Install vnc, xvfb in order to create a 'fake' display and firefox
RUN     apt-get install -y x11vnc xvfb firefox
RUN     mkdir ~/.vnc
# Setup a password
RUN     x11vnc -storepasswd 1234 ~/.vnc/passwd
# Autostart firefox (might not be the best way to do it, but it does the trick)
RUN     bash -c 'echo "firefox" >> /.bashrc'

这将创建一个运行 VNC 的 Docker 容器,密码为 1234

对于 Docker 版本 18 或更高版本:

 docker run -p 5900:5900 -e HOME=/ creack/firefox-vnc x11vnc -forever -usepw -create

对于 Docker 1.3 或更高版本:

 docker run -p 5900 -e HOME=/ creack/firefox-vnc x11vnc -forever -usepw -create

对于 1.3 版之前的 Docker:

 docker run -p 5900 creack/firefox-vnc x11vnc -forever -usepw -create

原文由 creack 发布,翻译遵循 CC BY-SA 4.0 许可协议

Xauthority 成为新系统的问题。我可以在运行我的 docker 容器之前放弃使用 xhost + 的任何保护,或者我可以传入一个准备充分的 Xauthority 文件。典型的 Xauthority 文件是特定于主机名的。使用 docker,每个容器都可以有不同的主机名(使用 docker run -h 设置),但即使将容器的主机名设置为与主机系统相同也无济于事。 xeyes(我喜欢这个例子)只会忽略魔术cookie并且不向服务器传递任何凭据。因此,我们收到一条错误消息“未指定协议无法打开显示”

Xauthority 文件的编写方式可以使主机名无关紧要。我们需要将 Authentication Family 设置为“FamilyWild”。我不确定,如果 xauth 有一个合适的命令行,那么这里是一个结合 xauth 和 sed 来做到这一点的例子。我们需要更改 nlist 输出的前 16 位。 FamilyWild 的值为 65535 或 0xffff。

 docker build -t xeyes - << __EOF__
FROM debian
RUN apt-get update
RUN apt-get install -qqy x11-apps
ENV DISPLAY :0
CMD xeyes
__EOF__
XSOCK=/tmp/.X11-unix
XAUTH=/tmp/.docker.xauth
xauth nlist :0 | sed -e 's/^..../ffff/' | xauth -f $XAUTH nmerge -
docker run -ti -v $XSOCK:$XSOCK -v $XAUTH:$XAUTH -e XAUTHORITY=$XAUTH xeyes

原文由 Jürgen Weigert 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题