it-swarm.com.de

X11-Weiterleitung der GUI-App im Docker-Container

Ich versuche derzeit, einige GUI-Apps in Docker-Containern auszuführen. Ich habe die von jessie frazelle bei github ausprobiert. Ich kann die Images jedoch erstellen (oder vom Docker Hub beziehen) und sie ohne sichtbare Fehler ausführen, aber die Fenster werden nicht angezeigt (ich kann die App nicht sehen).

Ich verwende Docker Version 1.13.1 unter Ubuntu 16.04

Das Bild wird erstellt aus:

FROM debian:stretch
MAINTAINER Jessie Frazelle <[email protected]>

RUN apt-get update && apt-get install -y \
    libreoffice \
    --no-install-recommends \
    && rm -rf /var/lib/apt/lists/*

ENTRYPOINT [ "libreoffice" ]

der Run-Befehl, den ich benutze, ist unten:

docker run -d \
    -v /tmp/.X11-unix:/tmp/.X11-unix \
    -v /etc/localtime:/etc/localtime \
    -e DISPLAY=unix$DISPLAY 
    -v $HOME/Documents:/root/Documents \
    -e GDK_SCALE \
    -e GDK_DPI_SCALE \
    --name libreoffice \
    jess/libreoffice

Nachdem ich viele Quellen durchsucht habe, kann ich sehen, dass das oben Genannte funktionieren sollte, und die meisten Leute sagen, dass die folgenden Zeilen im Befehl run erforderlich sind:

    -v /tmp/.X11-unix:/tmp/.X11-unix
    -e DISPLAY=unix$DISPLAY

trotzdem kann ich das Fenster nicht zum Anzeigen bringen.

  1. Wie kann ich das zum Laufen bringen?
  2. Was vermisse ich grundsätzlich?

Jede Hilfe wäre dankbar.

7
David Brough

Um mit dem X-Server kommunizieren zu können, muss der Benutzer, den Sie mit der App ausführen, berechtigt sein, mit dem X-Server zu kommunizieren. Ich denke, Sie haben zwei Möglichkeiten:

1) Ermöglichen Sie dem Benutzer, den Sie im Container haben, eine Verbindung zum X-Server herzustellen. Wenn Ihre App mit dem Benutzer root im Container ausgeführt wird, können Sie Folgendes verwenden:

$ xhost +SI:localuser:root

(Ich weiß nicht, welche Auswirkungen dies auf die Sicherheit hat, aber root sollte in der Lage sein, auf beide Arten eine Verbindung herzustellen ...)

2) Fügen Sie im Container einen Benutzer hinzu, der Ihrer Benutzersitzung entspricht. Wenn der Benutzer, den Sie im Host-System verwenden, die UID = 1000 hat, können Sie einen Dummy-Benutzer im Container erstellen:

$ useradd -u 1000 my_user

Verwenden Sie dann diesen Benutzer, um Ihre App im Container auszuführen. Dies erfordert keine Änderung der akkreditierten Hosts (da der Benutzer 1000 bereits eine Verbindung herstellen kann).

Wenn Sie sich die beiden Optionen ansehen, ist die zweite besser, da keine Änderungen im Host-System erforderlich sind. Wenn Sie diesen Container in anderen Systemen verwenden müssen, bei denen der Hauptbenutzer nicht mit UID = 1000 übereinstimmen konnte, können Sie den Container erstellen Empfangen Sie die richtige UID von einer Umgebungsvariablen und richten Sie dann den richtigen Benutzer ein (useradd + chown program files).

1
Salem