將 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

相關內容