Pythonコードを書いている間に可視化できるように、X11サーバーを実行しているDockerコンテナを実行する方法を理解しようとしており、多くの答えが見つかりました。
私は多くの質問と回答を見つけましたが、いくつかの解決策を提供しても、ほとんどの説明は私のような初心者にとっては十分ではありませんでした。だから私の特別なケースでは動作しません。
誰かがこれがうまくいかない理由を理解するのに役立ちますか?
$> XSOCK=/tmp/.X11-unix
$> XAUTH=/tmp/.docker.xauth
$> xauth nlist $DISPLAY | sed -e 's/^..../ffff/' | xauth -f $XAUTH nmerge -
$> sudo docker run --name my_name \
-v $XSOCK:$XSOCK \
-v $XAUTH:$XAUTH \
-e DISPLAY=$DISPLAY \
-e XAUTHORITY=$XAUTH \
-it b9d09a81e708
次のようにグラフを作成しようとしたときに発生するエラーは次のとおりですmatplotlib
。
In [1]: import matplotlib.pyplot as plt
In [2]: plt.figure()
--------------------------------------------------------------------
TclError Traceback (most recent call last)
...
TclError: couldn't connect to display "localhost:10.0"
以下は、この一連のコマンドの現在の理解です。
XSOCK
ローカルシステムのソケットへのパスを含む新しい変数を作成し、フラグを使用してマウントしてローカルシステムの既存のX11ソケットをdockerコンテナのソケットに接続します-v
。ソケットパスを含むローカルシステムに新しい変数を作成し、それをフラグとしてマウントして新しいソケットを作成します
/tmp/.docker.xauth
(ファイルは現在存在しません)。XAUTH
-v
使用
xauth
コマンドは、ローカルシステムの現在の表示を数値形式で一覧表示し、コマンドを使用してsed
それを変更し、作成したばかりの新しいソケットファイルに再度追加します。Dockerイメージを実行し、値を
DISPLAY
使用してローカルシステムに新しい変数sumを作成します。XAUTHORITY
DISPLAY
XAUTH
まだわからない内容は次のとおりです。
新しく作成されたソケットの用途は何ですか
/tmp/.docker.xauth
?このコマンドは何をしますか
xauth nlist $DISPLAY | sed -e 's/^..../ffff/' | xauth -f $XAUTH nmerge -
?特に:ㅏ。このセクション
sed
の目的は何ですか?の出力をのxauth nlist $DISPLAY
入力にどのように変更しますかxauth -f $XAUTH nmerge -
?b
-
の終わりは何ですかxauth -f $XAUTH nmerge -
?Dockerfileに接続するときにオーバーヘッドが発生しないように、これらのコマンドの1つをDockerfile内で直接実行できますか?
ありがとう