web-dev-qa-db-ja.com

リモートサーバーのDockerコンテナーからのX11転送

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転送でこれを適切に行うにはどうすればよいですか?

9
otterb

それを機能させるには、次のことを解決する必要があります。

  1. XアプリケーションがXサーバーを見つけることができること
    • SSHの場合、トンネルが必要です(/ etc/ssh/sshd_configに「ssh -X」と「X11Forwarding yes」)
    • アドレスは$ DISPLAYにある必要があります(-eを使用)。 「localhost」を、Dockerコンテナーから見たDockerホストの実際のIPアドレスに置き換える必要があります。
  2. XアプリケーションがXサーバーとの通信を許可されていること
    • XauthマジックCookieをDockerコンテナーに伝播します
    • DockerホストからX11ポート用のDockerコンテナーへのファイアウォールポートを開きます
    • SSHサーバーがリモートIP上のX11 TCP接続を受け入れるように構成されていることを確認してください。

それを行う方法の詳細については、StackOverflowで私の質問(および回答)を参照してください: https://stackoverflow.com/questions/48235040/run-x11-application-in-a-docker-container-reliably -on-a-server-connected-via-ssh

10
Ruben

コンテナ:

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 

参考:

dkyo/Dockerfile

0
Airbak

リモートDockerコンテナーでGUIアプリを実行するために、サーバーからのX11転送は必要ありません。 X11サーバーをTCP:6000でリッスンし、-e DISPLAY=$IP:0を使用してリモートDockerコンテナーを実行できます。$ IPはX11サーバーを実行するコンピューターのIPアドレスです。

XQuarzを搭載したMacbookで、リモートUbuntuにリモートDockerコンテナーを表示するように機能させました。

docker run -it --rm -e DISPLAY=$macbook_ip:0 fr3nd/xeyes

次に、xeyesがmacbookに表示されます

0
bin