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 run
オプションを渡すことで、プロットGUIをドッカーからローカルマシンのディスプレイ(つまり、ミントサーバー)に出力できます。サーバーに-X
オプションを付けてsshを実行し、クライアントにxeyes
ウィンドウを取得することもできます。
しかし、-X
オプションを使用してサーバーにsshし、-DISPLAY=localhost or client IP
を使用して実行されているコンテナにログインしても、クライアントマシンへのプロットを取得できません。
私はそれを回避するためにVNCを使用できることを知っています。しかし、X11転送でこれを適切に行うにはどうすればよいですか?
それを機能させるには、次のことを解決する必要があります。
それを行う方法の詳細については、StackOverflowで私の質問(および回答)を参照してください: https://stackoverflow.com/questions/48235040/run-x11-application-in-a-docker-container-reliably -on-a-server-connected-via-ssh
コンテナ:
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
参考:
リモートDockerコンテナーでGUIアプリを実行するために、サーバーからのX11転送は必要ありません。 X11サーバーをTCP:6000でリッスンし、-e DISPLAY=$IP:0
を使用してリモートDockerコンテナーを実行できます。$ IPはX11サーバーを実行するコンピューターのIPアドレスです。
XQuarzを搭載したMacbookで、リモートUbuntuにリモートDockerコンテナーを表示するように機能させました。
Macbookでsocatを使用してX11サーバーがTCPでリッスンするようにします Mac OS X上のDockerでGUIを実行する に従います。
リモートのUbuntuで
docker run -it --rm -e DISPLAY=$macbook_ip:0 fr3nd/xeyes
次に、xeyesがmacbookに表示されます