使用 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 应用程序不起作用的主要内容,如果未能解决你的问题,请参考以下文章
在 Windows 上使用 x11 转发在 docker 内运行 Omnet++。 SSH 不工作