2016-11-09 1 views
4

anzuzeigen Wenn ich versuche, eine grafische Benutzeroberfläche, wie xclock zum Beispiel zu laufen bekomme ich den Fehler:Wie GUI-Anwendungen aus dem Innern eines Docker Behälter

Error: Can't open display: 

Ich versuche Docker zu verwenden, um einen ROS Behälter zu laufen, und ich muss die GUI-Anwendungen sehen, die darin laufen.

Ich habe dies einmal nur mit einem Vagrant VM und war in der Lage, X11 zu verwenden, um es zu erledigen.

Bisher habe ich versucht habe Putting Weg # 1 und # 2 in eine Docker-Datei auf der Grundlage der Informationen hier: http://wiki.ros.org/docker/Tutorials/GUI

Dann habe ich versucht hier die meisten der dockerfile Kopieren: https://hub.docker.com/r/mjenz/ros-indigo-gui/~/dockerfile/

Hier meine aktuelle docker-Datei:

# Set the base image to use to ros:kinetic 
FROM ros:kinetic 

# Set the file maintainer (your name - the file's author) 
MAINTAINER me 

# Set ENV for x11 display 
ENV DISPLAY $DISPLAY 
ENV QT_X11_NO_MITSHM 1 

# Install an x11 app like xclock to test this 
run apt-get update 
run apt-get install x11-apps --assume-yes 

# Stuff I copied to make a ros user 
ARG uid=1000 
ARG gid=1000 

RUN export uid=${uid} gid=${gid} && \ 
    groupadd -g ${gid} ros && \ 
    useradd -m -u ${uid} -g ros -s /bin/bash ros && \ 
    passwd -d ros && \ 
    usermod -aG sudo ros 

USER ros 
WORKDIR /home/ros 

# Sourcing this before .bashrc runs breaks ROS completions 
RUN echo "\nsource /opt/ros/kinetic/setup.bash" >> /home/ros/.bashrc 

# Copy entrypoint script into the image, this currently echos hello world 
COPY ./docker-entrypoint.sh/
ENTRYPOINT ["/docker-entrypoint.sh"] 

Antwort

3

Meine persönliche Präferenz ist die Anzeige variabel und teilen sich die Unix-Socket oder X-Fenster mit so etwas wie zu injizieren:

Das Teilen der Ortszeit erlaubt nur, dass die Zeitzone übereinstimmt, ich benutze dies für E-Mail-Anwendungen.

Die andere Option besteht darin, einen VNC-Server hochzufahren, Ihre App auf diesem Server auszuführen und dann eine Verbindung mit dem Container mit einem VNC-Client herzustellen. Ich bin weniger ein Fan von diesem, da Sie am Ende zwei Prozesse haben, die innerhalb des Containers laufen, die Signalverarbeitung machen und eine Herausforderung protokollieren. Es hat den Vorteil, dass die App besser isoliert ist. Wenn sie gehackt wird, hat sie keinen Zugriff auf Ihr X-Display.

Verwandte Themen