Wie können Sie GUI-Anwendungen in einem Linux Docker-Container ausführen?
Gibt es Abbilder, die vncserver
oder ähnliches einrichten, so dass Sie - zum Beispiel - eine zusätzliche Sicherheitsbarriere um beispielsweise Firefox hinzufügen können?
Wie können Sie GUI-Anwendungen in einem Linux Docker-Container ausführen?
Gibt es Abbilder, die vncserver
oder ähnliches einrichten, so dass Sie - zum Beispiel - eine zusätzliche Sicherheitsbarriere um beispielsweise Firefox hinzufügen können?
Noch eine Antwort, falls Sie das Bild bereits erstellt haben:
Docker ohne sudo aufrufen (Wie man Docker repariert: Berechtigungsverweigerungsproblem)
Den gleichen BENUTZER & das gleiche Home-Verzeichnis & Passwort zwischen Host und Container teilen (Tipps: Verwenden Sie die Benutzer-ID anstelle des Benutzernamens)
Das Entwicklungsverzeichnis für treiberabhängige Bibliotheken sollte gut funktionieren
und X11-Weiterleitung hinzufügen.
docker run --name=CONTAINER_NAME --network=host --privileged \
-v /dev:/dev \
-v `echo ~`:/home/${USER} \
-p 8080:80 \
--user=`id -u ${USER}` \
--env="DISPLAY" \
--volume="/etc/group:/etc/group:ro" \
--volume="/etc/passwd:/etc/passwd:ro" \
--volume="/etc/shadow:/etc/shadow:ro" \
--volume="/etc/sudoers.d:/etc/sudoers.d:ro" \
--volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \
-it REPO:TAG /bin/bash
Sie könnten fragen, wozu man Docker verwendet, wenn so viele Dinge gleich sind? Nun, ein Grund, den ich mir vorstellen kann, ist, das Paketabhängigkeitschaos zu überwinden (https://en.wikipedia.org/wiki/Dependency_hell).
Daher denke ich, dass diese Art der Verwendung eher für Entwickler geeignet ist.
fcwu/docker-ubuntu-vnc-desktop
(Ubuntu 18.04, 20.04)
https://github.com/fcwu/docker-ubuntu-vnc-desktop bietet eine praktische Konfiguration. Diese Konfiguration ist nicht minimiert. Es wäre gut, sie zu minimieren. Aber ich habe einfach keine Zeit, und diese funktioniert jedes Mal, wenn ich sie ausprobiere, also neige ich dazu, sie einfach zu verwenden. Auf der positiven Seite, da sie nicht minimiert ist, neigt sie dazu, komplexere Programme zu testen, um sicherzustellen, dass sie tatsächlich durch die unendlich vielen Fallstricke von Docker funktionieren. Außerdem würden Setups bei jedem Gast-/Host-Update zusammenbrechen, und eine Minimierung würde wahrscheinlich nur für eine begrenzte Zeit funktionieren, bis Sie dieses Projekt erneut minimieren müssten.
Um es zu starten, führen Sie einfach aus:
sudo docker run --name ubvnc -p 6080:80 -p 5900:5900 dorowu/ubuntu-desktop-lxde-vnc:focal
Dann auf dem Host entweder:
gehe zu: http://127.0.0.1:6080/#/, was einen noVNC JavaScript VNC-Client mit begrenzten Funktionen ausführt
führe aus:
sudo apt-get install tigervnc-viewer
xtigervncviewer :5900
Um in den Vollbildmodus zu wechseln, drücken Sie F8 und klicken Sie auf den Menüeintrag, oder einfach F8 gefolgt von T: https://superuser.com/questions/285843/how-do-i-switch-in-out-of-fullscreen-mode-from-the-command-line-in-realvnc. Möglicherweise müssen Sie nach diesem Schritt den Bildschirm schließen und erneut öffnen, damit das Bild größer wird.
Ich habe auch vinagre
ausprobiert, aber es war viel langsamer, als ich in Firefox auf YouTube gescrollt habe.
In vinagre
möchten Sie möglicherweise in den Vollbildmodus wechseln, um den gesamten Desktop sehen zu können
Zum Beenden beenden Sie einfach docker
in der Konsole. Und um die Maschine neu zu starten:
sudo docker start ubvnc
und dann erneut mit VNC verbinden. Dann zum Beenden der Maschine:
sudo docker stop ubvnc
Sie müssen ein paar Sekunden warten, bis der VNC-Server auf dem Gast gestartet ist, bevor Sie eine Verbindung herstellen können.
Chromium innerhalb des Gasts startet nicht über das Menü. Wenn Sie versuchen, es über die Befehlszeile zu starten, erklärt es warum:
Als Root ohne --no-sandbox ausführen wird nicht unterstützt. Siehe https://crbug.com/638180.
Führen Sie es daher einfach von der Befehlszeile aus mit:
chromium-browser --no-sandbox
Firefox kümmert sich jedoch nicht darum.
TODO: kein Audio. --device /dev/snd
hat nicht geholfen:
EDIT: sie haben einen Abschnitt hinzugefügt: https://github.com/fcwu/docker-ubuntu-vnc-desktop/tree/e4922ce92f945fc482994b7a0fd95ca5de7295b3#sound-preview-version-and-linux-only
Siehe auch:
Getestet auf:
fcwu/docker-ubuntu-vnc-desktop
, Abbild-ID: 70516b87e92d.dorowu/ubuntu-desktop-lxde-vnc:focal
(Ubuntu 20.04)Docker mit BRIDGE-Netzwerk. für Ubuntu 16.04 mit Display-Manager lightdm:
cd /etc/lightdm/lightdm.conf.d
sudo nano user.conf
[Seat:*]
xserver-allow-tcp=true
xserver-command=X -listen tcp
Sie können strengere Berechtigungen verwenden
xhost +
docker run --volume="$HOME/.Xauthority:/root/.Xauthority:rw" --env="DISPLAY=$HOST_IP_IN_BRIDGE_NETWORK:0" --net=bridge $container_name
Es gibt viele gute Antworten hier, wie man eine GUI-App in einem Docker-Container mit dem auf dem Host-Rechner laufenden X-Server verbindet, oder wie man einen virtuellen X-Server ausführt und sich über VNC mit dem Container verbindet, um darauf zuzugreifen.
Es gibt jedoch eine weitere Lösung (die ziemlich nützlich ist für beispielsweise Kiosks oder Heimkinos) - Sie können einen X-Server innerhalb des Docker-Containers ausführen und das Videoausgang zum Monitor anschließen, der an Ihren Host-Rechner angeschlossen ist.
Zuerst erstellen wir ein Docker-Volume, um den X11-Socket zu speichern:
docker volume create --name xsocket
Jetzt können wir ein Image mit dem X-Server erstellen:
FROM ubuntu
RUN apt-get update && \
DEBIAN_FRONTEND='noninteractive' apt-get install -y xorg
CMD /usr/bin/X :0 -nolisten tcp vt1
Lassen Sie uns das bauen, starten und den X11-Socket im xsocket
Docker-Volume speichern:
docker build . -t docker-x-server:latest
docker run --privileged -v xsocket:/tmp/.X11-unix -d docker-x-server:latest
Jetzt können wir eine GUI-Anwendung in einem anderen Docker-Container ausführen (juchu!) und sie auf unseren X-Server über das xsocket
-Volume verweisen:
docker run --rm -it -e DISPLAY=:0 -v xsocket:/tmp/.X11-unix:ro stefanscherer/xeyes
Wenn Sie Eingaben benötigen (wie Tastatur), installieren Sie das Paket xserver-xorg-input-evdev
und fügen Sie -v /run/udev/data:/run/udev/data
hinzu, da standardmäßig kein udev in Containern vorhanden ist.
Sie können sogar die --privileged
-Flagge entfernen, indem Sie die SYS_TTY_CONFIG
-Berechtigung gewähren und einige Geräte in den Container binden:
docker run --name docker-x-server --device=/dev/input --device=/dev/console --device=/dev/dri --device=/dev/fb0 --device=/dev/tty --device=/dev/tty1 --device=/dev/vga_arbiter --device=/dev/snd --device=/dev/psaux --cap-add=SYS_TTY_CONFIG -v xsocket:/tmp/.X11-unix -d docker-x-server:latest
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.