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