X11-Weiterleitung von einem Docker-Container auf einem Remote-Server

10

Ich möchte auf meinem Linux Mint 18-Server (unter X11) ssh und mich in einem Docker-Container anmelden und iPython matplotlib-Plots an den lokalen Client (auch Mint) weiterleiten lassen. Alles im lokalen Netzwerk.

Die nächste Frage, die ich gefunden habe, war: /programming/25281992/alternatives-to-ssh-x11-forwarding-for-docker-containers

Anschließend konnte ich eine Plot-GUI vom Docker auf die Anzeige des lokalen Computers (ei, den Mint-Server) übertragen, indem eine -e DISPLAY=$DISPLAYOption an den docker runBefehl übergeben wurde. Ich kann auch mit -XOption auf den Server ssh , um xeyesFenster zum Client zu bekommen .

Wenn ich jedoch mit -XOption auf den Server ssh und -DISPLAY=localhost or client IPmich bei dem Container anmelde, mit dem ausgeführt wird , kann ich immer noch kein Diagramm auf dem Clientcomputer abrufen.

Ich weiß, dass ich VNC verwenden könnte, um es zu umgehen. Aber wie kann ich das mit der X11-Weiterleitung richtig machen?

otterb
quelle
DISPLAY=$DISPLAYsollte auch im SSH-Fall funktionieren ( ssh -Xsetzt die Variable auf den entsprechenden Wert, es ist nicht nur eine IP-Adresse). Hast du das versucht?
Stephen Kitt

Antworten:

11

Sie müssen diese Dinge lösen, damit es funktioniert:

  1. Dass die X-Anwendung den X-Server finden kann
    • Für SSH muss ein Tunnel vorhanden sein ("ssh -X" und "X11Forwarding yes" in / etc / ssh / sshd_config).
    • Die Adresse muss in $ DISPLAY sein (mit -e). Sie müssen "localhost" durch die tatsächliche IP-Adresse des Docker-Hosts ersetzen, die im Docker-Container angezeigt wird.
  2. Dass die X-Anwendung berechtigt ist, mit dem X-Server zu kommunizieren
    • Verbreiten Sie den xauth Magic Cookie in den Docker-Container
    • Öffnen Sie alle Firewall-Ports vom Docker-Host zum Docker-Container für den X11-Port
    • Stellen Sie sicher, dass der SSH-Server so konfiguriert ist, dass er X11-TCP-Verbindungen auf einer Remote-IP akzeptiert.

Weitere Informationen dazu finden Sie in meiner Frage (und Antwort) hier auf StackOverflow: /programming/48235040/run-x11-application-in-a-docker-container-reliably-on-a -Server-verbunden-über-SSH

Ruben
quelle
0

Um eine GUI-App in einem Remote-Docker-Container auszuführen, benötigen Sie keine X11-Weiterleitung vom Server. Sie können den X11-Server dazu bringen, TCP: 6000 abzuhören, und den Remote-Docker-Container ausführen, mit -e DISPLAY=$IP:0dem $ IP die IP-Adresse des Computers ist, auf dem der X11-Server ausgeführt wird.

Ich habe es auf einem MacBook mit XQuarz zum Laufen gebracht, um einen Remote-Docker-Container auf Remote-Ubuntu anzuzeigen:

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

Dann werden die xeyes auf dem Macbook angezeigt

Behälter
quelle
0

Container:

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 

Klient:

ssh -X user@ip 

Referenz:

udkyo / Dockerfile

Airbak
quelle