将 X 窗口重定向到 Docker 容器

将 X 窗口重定向到 Docker 容器

我正在尝试在 Docker 容器上重定向 X 窗口,并使用 xeyes 进行测试。我使用了 ubuntu docker 镜像。

我的Dockerfile:

FROM ubuntu
RUN apt-get update
RUN apt-get -y install x11-apps

创建图像:

docker build -t x11 .

在启动容器之前,为了允许所有到 X 服务器的连接:

xhost +

测试X重定向,一切正常:

ssh -X localhost xeyes

启动容器:

docker run -it --net=host --env="DISPLAY" --volume="$HOME/.Xauthority:/root/.Xauthority:rw" --rm x11 xeyes

并得到以下输出:

Error: Can't open display: :0

我也尝试过这种方法:

docker run -it --net=host --env="DISPLAY" --volume="/tmp/.X11-unix/X0:/tmp/.X11-unix/X0:rw" --rm x11 xeyes

并得到同样的错误:

Error: Can't open display: :0

我也尝试了发布在SSH X-Forward 到与 Docker 容器共享的 X11 套接字,但得到了同样的结果。

我使用 Centos 7 作为主机。显然,这与 Centos 上的 X 服务器有关。我在虚拟机中尝试了 Kubuntu 19.04 的默认安装,安装了 docker,它运行正常。

更新:

以 root 身份执行这些命令:

ausearch -c 'xeyes' --raw | audit2allow -M my-xeyes
semodule -i my-xeyes.pp

它对所有用户都有效!

知道为什么吗?

答案1

使用 ubuntu:20.04 时

我发现 -u 0 可以解决 podman 的问题,而 -u $UID 可以解决 docker 的问题。

$podman run -it -u 0 -e DISPLAY="$DISPLAY" -v /tmp/.X11-unix:/tmp/.X11-unix:rw podman-image xclock

$docker run -it -u $UID -e DISPLAY="$DISPLAY" -v /tmp/.X11-unix:/tmp/.X11-unix:rw docker-image xclock

在 docker 文件上安装 x11-apps

相关内容