DockerコンテナでPythonを描画するためのXauthority

DockerコンテナでPythonを描画するためのXauthority

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"

以下は、この一連のコマンドの現在の理解です。

  1. XSOCKローカルシステムのソケットへのパスを含む新しい変数を作成し、フラグを使用してマウントしてローカルシステムの既存のX11ソケットをdockerコンテナのソケットに接続します-v

  2. ソケットパスを含むローカルシステムに新しい変数を作成し、それをフラグとしてマウントして新しいソケットを作成します/tmp/.docker.xauth(ファイルは現在存在しません)。XAUTH-v

  3. 使用xauthコマンドは、ローカルシステムの現在の表示を数値形式で一覧表示し、コマンドを使用してsedそれを変更し、作成したばかりの新しいソケットファイルに再度追加します。

  4. Dockerイメージを実行し、値をDISPLAY使用してローカルシステムに新しい変数sumを作成します。XAUTHORITYDISPLAYXAUTH

まだわからない内容は次のとおりです。

  1. 新しく作成されたソケットの用途は何ですか/tmp/.docker.xauth

  2. このコマンドは何をしますかxauth nlist $DISPLAY | sed -e 's/^..../ffff/' | xauth -f $XAUTH nmerge -?特に:

    ㅏ。このセクションsedの目的は何ですか?の出力をのxauth nlist $DISPLAY入力にどのように変更しますかxauth -f $XAUTH nmerge -

    b-の終わりは何ですかxauth -f $XAUTH nmerge -

  3. Dockerfileに接続するときにオーバーヘッドが発生しないように、これらのコマンドの1つをDockerfile内で直接実行できますか?

ありがとう

ベストアンサー1

おすすめ記事