我正在尝试在 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