2017-09-29 3 views
2

Ich habe ein einfaches Docker Bild erstellt, das SSH + xeyes enthält. Ich führe diesen Container aus, verbinde mich per SSH mit X11 Forwarding mit dem Container und möchte xeyes anzeigen können.Gleiches Docker Bild vor X11 einen Host, aber nicht auf einem anderen

Ich habe gebaut und die Docker-Container auf Host A laufen, wenn ich mit dem Behälter verbinden, es funktioniert nichtError: Can't open display:

Ich habe zu bauen und den Docker-Container auf einen anderen Host laufen, B. Und es wirkt wie ein Zauber.

Ich verstehe nicht den Unterschied ...

Mein Dockerfile:

FROM ubuntu:16.04 
ENV SSH_PASSWORD "rootpass" 
RUN apt-get update 
RUN apt-get install -qqy x11-apps openssh-server ssh 

# Install SSH access 
RUN mkdir /var/run/sshd 
RUN echo "root:$SSH_PASSWORD" | chpasswd 
RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config 
RUN sed '[email protected]\s*required\s*[email protected] optional [email protected]' -i /etc/pam.d/sshd 

CMD [ "/usr/sbin/sshd", "-D" ] 
EXPOSE 22 

Auf Host A und B, das tue ich:

  • Erstellen Sie das Bild mit docker build -t myeyes .
  • Führen Sie den Container mit: docker run -d -p 7222:22 --name myeyes myeyes.

Dann von einem anderen Host C, ich xhost + und ich versuche, diese Behälter:

Es nicht für den Behälter auf A:

$ ssh -X -p 7222 [email protected] 
... 
# env | grep DISPLAY 
# xeyes 
Error: Can't open display: 
# grep X11Forward /etc/ssh/sshd_config 
X11Forwarding yes 
# ls -al 
-rw------- 1 root root 180 Sep 29 09:32 .bash_history 
-rw-r--r-- 1 root root 3106 Oct 22 2015 .bashrc 
drwx------ 2 root root 4096 Sep 29 09:04 .cache 
-rw-r--r-- 1 root root 148 Aug 17 2015 .profile 

Es für den Behälter funktioniert auf B:

$ ssh -X -p 7222 [email protected] 
... 
# env | grep DISPLAY 
DISPLAY=localhost:10.0 
# grep X11Forward /etc/ssh/sshd_config 
X11Forwarding yes 
# ls -al 
-rw------- 1 root root 58 Sep 29 09:34 .Xauthority 
-rw------- 1 root root 59 Sep 29 09:33 .bash_history 
-rw-r--r-- 1 root root 3106 Oct 22 2015 .bashrc 
drwx------ 2 root root 4096 Sep 29 09:21 .cache 
-rw-r--r-- 1 root root 148 Aug 17 2015 .profile 
# cat .Xauthority 
... 
MAGIC COOKIE 
... 
# xeyes 

Nr Das auf B habe ich eine gültige .Xauthority und DISPLAY. Allerdings habe ich nichts besonderes getan, um sie einzurichten, also Warum werden sie nicht auf den Container für A gesetzt?

Endlich Host A ist ein Linux Mint 18.1 Laptop. Host B ist eine Debian Jessie.

+0

Haben Sie GUI auf Host A haben oder Sie sind alle von ihm im Kommandozeilen-Modus ausgeführt wird? –

+0

Ich habe GUI auf Host A und Host B. – user1381

+0

Haben Sie ein Paket namens xauth auf Host A? Wenn nicht, versuche es zu installieren. –

Antwort

1

Aktivieren ausführliche Informationen in ssh, bemerkte ich die folgenden Meldungen:

debug2: x11_get_proto: /usr/bin/xauth list :0 2>/dev/null 
debug1: Requesting X11 forwarding with authentication spoofing. 
... 
X11 forwarding request failed on channel 0 

ich die Bahn dann für "X11 forwarding request failed on channel 0" gesucht und fand die Lösung: in/etc/ssh/sshd_config hinzu:

X11UseLocalhost no 

Und dann funktioniert ssh -X überall einwandfrei.

So muss dieser Befehl für meine Container des Dockerfile hinzugefügt:

RUN echo "X11UseLocalhost no" >> /etc/ssh/sshd_config 
Verwandte Themen