如何在 Linux Docker 容器中运行 GUI 应用程序?
是否有任何图像设置 vncserver
或其他东西,以便您可以 - 例如 - 在 Firefox 周围添加一个额外的减速沙箱?
原文由 Will 发布,翻译遵循 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 许可协议
7 回答5.3k 阅读
4 回答4k 阅读
2 回答5.9k 阅读✓ 已解决
2 回答2.5k 阅读✓ 已解决
2 回答2.4k 阅读✓ 已解决
1 回答2.3k 阅读✓ 已解决
2 回答799 阅读✓ 已解决
您可以简单地安装 vncserver 和 Firefox :)
我在这里推送了一个图像,vnc/firefox:
docker pull creack/firefox-vnc
镜像是用这个 Dockerfile 制作的:
这将创建一个运行 VNC 的 Docker 容器,密码为
1234
:对于 Docker 版本 18 或更高版本:
对于 Docker 1.3 或更高版本:
对于 1.3 版之前的 Docker: