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

私も投稿された解決策を試しましたDocker コンテナと共有される X11 ソケットへの SSH X-Forward、同じ結果になりました。

私は 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を使用する場合

podman の場合は -u 0 で問題が解決し、docker の場合は -u $UID で問題が解決することがわかりました。

$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をインストールします

関連情報