使用 X11 在 docker 内运行 GUI 应用程序不起作用

Posted

技术标签:

【中文标题】使用 X11 在 docker 内运行 GUI 应用程序不起作用【英文标题】:Using X11 to run GUI apps inside docker not working 【发布时间】:2019-11-17 23:38:58 【问题描述】:

我正在尝试使用 X11 转发在 docker 容器内运行 GUI 应用程序,即使绑定 Xauthority 文件也无法使其工作。

# Dockerfile
FROM alpine

RUN apk --no-cache add xterm
RUN adduser --disabled-password --home /home/user --uid 1000 --gecos 'USER' user
WORKDIR /home/user
USER user

CMD /usr/bin/xterm

我试过以下命令运行,都没有成功:

docker run -it --rm -e DISPLAY image
docker run -it --rm -e DISPLAY -v /tmp/.X11-unix image
docker run -it --rm -e DISPLAY -e XAUTHORITY -v $XAUTHORITY image
docker run -it --rm -e DISPLAY -e XAUTHORITY -v $XAUTHORITY -v /tmp/.X11-unix image
docker run -it --rm --net=host --privileged -e DISPLAY -e XAUTHORITY -v $XAUTHORITY -v /tmp/.X11-unix image

基本上,它们都会产生相同的错误Can't open display: :0。至此,我已经用完了 *** 和其他教程中讨论的所有选项

我不确定 Xauthority 文件的权限是否重要,但是当我从容器内部绑定时,它具有 root:root 权限,而主机具有 user:user 权限。

我也使用过 (Can you run GUI applications in a Docker container?) 但没有任何成功的答案

【问题讨论】:

查看this 发布的 GUI 部分。开发人员是|曾在 Docker 工作,并且支持展示如何在 Docker 下运行几乎所有东西。 HTH! 我也使用过这些图片,但我也遇到了同样的问题。我使用了 UNIX 套接字并将显示变量设置为 unix:0,但我仍然得到同样的错误 啊,我没主意了,抱歉。 我尝试在主机上为 XAUTHORITY 文件添加 755 权限并且能够连接,但这需要 --privileged 标签。你有什么建议不需要 --privileged 【参考方案1】:

在运行容器之前您是否尝试过xhost +(这样您的本地 X 服务器将接受来自容器的连接)?您仍然需要像这样设置 DISPLAY 等:

docker run -v /tmp/.X11-unix:/tmp/.X11-unix -e "DISPLAY=unix:0.0" --device /dev/dri --privileged -it --rm yourapp

注意:xhost + 允许从任何地方传入 X 连接,所以要小心!

【讨论】:

docker容器完成后也可以运行xhost -... 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。

以上是关于使用 X11 在 docker 内运行 GUI 应用程序不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Pycharm,Docker和GUI

在 Windows 上使用 x11 转发在 docker 内运行 Omnet++。 SSH 不工作

Docker运行GUI软件的方法

Docker:使用远程 X 服务器运行应用程序

Centos 开启X11 Forwarding,实现无桌面环境运行GUI软件

X11 显示变量未设置 - 无法运行 Docker Image