Linux mint 18サーバー(X11を実行)にsshを接続してdockerコンテナにログインした後、iPython matplotlibプロットをローカルクライアント(またmint)に渡したいと思います。すべてローカルネットワークにあります。
私が見つけた最も近い質問は次のとおりです。https://stackoverflow.com/questions/25281992/alternatives-to-ssh-x11-forwarding-for-docker-containers
-e DISPLAY=$DISPLAY
次に、コマンドに渡されたオプションを使用して、dockerからローカルコンピュータのモニタ(ei、mintサーバー)にフローティングGUIを出力できますdocker run
。また、-X
SSHを介してサーバーに接続してxeyes
クライアントウィンドウをインポートすることもできます。
ただし、オプションを使用してサーバーにSSH接続し、-X
実行中のコンテナにログインしても、-DISPLAY=localhost or client IP
クライアントシステムからプロットをインポートできません。
この問題を解決するためにVNCを使用できることを知っています。しかし、X11転送を正しく使用する方法は?
答え1
動作するには、次の問題を解決する必要があります。
- XアプリケーションはXサーバーを見つけることができます
- SSHの場合はトンネルが必要です(/etc/ssh/sshd_configの「ssh -X」および「X11Forwarding yes」)。
- アドレスは$ DISPLAYになければなりません(-eを使用)。 Dockerコンテナ内でわかるように、「localhost」をDockerホストの実際のIPアドレスに置き換える必要があります。
- XアプリケーションにはXサーバーと通信する権限があります。
- xauth マジッククッキーを Docker コンテナに伝播
- DockerホストからX11ポート用のDockerコンテナまで、すべてのファイアウォールポートを開きます。
- SSH サーバーがリモート IP から X11 TCP 接続を許可するように構成されていることを確認します。
これを行う方法の詳細については、StackOverflowに関する私の質問(および回答)を参照してください。https://stackoverflow.com/questions/48235040/run-x11-application-in-a-docker-container-reliously-on-a-server-connected-via-ssh
答え2
リモートDockerコンテナでGUIアプリケーションを実行するには、サーバーからX11転送を必要としません。 X11サーバーがTCP:6000を受信し、-e DISPLAY=$IP:0
$ IPがX11サーバーを実行しているコンピューターのIPアドレスである場合は、リモートドッカーコンテナーを実行できます。
リモートUbuntuにリモートドッカーコンテナを表示するために、Macbookで動作するXQuarzを使用しました。
Macbookでsocatを使用して、X11サーバーに次のようにTCPをリッスンさせます。Dockerを使用してMac OS XでGUIを実行する。
リモートUbuntuから
docker run -it --rm -e DISPLAY=$macbook_ip:0 fr3nd/xeyes
これにより、Macbookにxeyesが表示されます。
答え3
Pythonモジュールドッカーxこの問題を解決することを目指しています。
これをインストールして実行できます。
python3 -m pip install dockerx --user
X11サポートコンテナを実行するには、次の手順に従ってください。
$ python3 -m dockerx.run --image ubuntu --command 'sleep infinity'
To get a container terminal run: docker exec -it b05bd722477e /bin/bash
To kill the container run: docker kill b05bd722477e
To remove the container run: docker rm b05bd722477e
$ docker exec -it b05bd722477e /bin/bash
root@b05bd722477e:/# apt update && apt install -y x11-apps
root@b05bd722477e:/# xclock
これにより、xclock
画面にその内容が表示されます。
CUDAサポートが必要な場合(システムにDocker NVIDIA Runtimeをインストールする必要がある場合)、次のコマンドを使用してコンテナを起動します。
$ python3 -m dockerx.run --image nvidia/cuda:11.0-base --nvidia 1 --command 'sleep infinity'
ドッカーxX11UseLocalhost no
にオプションを設定するには、リモートシステムで実行されているSSHサーバーが必要です/etc/ssh/sshd_config
。
詳細については、以下を確認してください。dockerx Pythonモジュール用GitHub。
答え4
コンテナ:
cp /etc/ssh/sshd_config /etc/ssh/sshd_config_bak
sed -i "s/^.*X11Forwarding.*$/X11Forwarding yes/" /etc/ssh/sshd_config
sed -i "s/^.*X11UseLocalhost.*$/X11UseLocalhost no/" /etc/ssh/sshd_config
grep "^X11UseLocalhost" /etc/ssh/sshd_config || echo "X11UseLocalhost no" >> /etc/ssh/sshd_config
顧客:
ssh -X user@ip
引用: