
我正在嘗試重定向 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