So führen Sie Chromium von einem Docker-Container aus


9

Umgebung

  • MacOS Sierra 10.12.6
  • Docker Version 17.09.0-ce, Build afdb6d4
  • Ubuntu 16.04
  • XQuartz 2.7.9

Ich möchte den Chromium-Browser von einem Docker-Container auf meinem Mac-Desktop öffnen.

docker run -i -t ubuntu:16.04 /bin/bash
apt-get update
apt-get install alsa-base chromium-browser xauth
adduser myuser

Verpflichten

docker commit 2862a7bfcc2f  acme/mycontainer:0.1

Ausführen des Chrom-Browsers myuserab Container FAIL

docker run --user myuser -i -t acme/mycontainer:0.1 /usr/bin/chromium-browser
Failed to move to new namespace: PID namespaces supported, Network namespace supported, but failed: errno = Operation not permitted

Ich wette, da steckt noch ein bisschen mehr dahinter

Irgendwelche Hinweise?

UDPATE - mit --privileged

Behebt den Fehler Siehe Thread bei Serverfehler, aber die Benutzeroberfläche wird nicht angezeigt

docker run \
       --privileged \
       --user mysuer \
       -i -t acme/mycontainer:0.1 /usr/bin/chromium-browser

und das hier

docker run \
   --privileged \
   --net host \
   -v /tmp/.X11-unix:/tmp/.X11-unix \
   -e DISPLAY=$DISPLAY \
   -e XAUTHORITY=/.Xauthority \
   -v ~/.Xauthority:/.Xauthority:ro \
   --name chromium \
   --user mysuser \
   -i -t acme/mycontainer:0.1 /usr/bin/chromium-browser

Chrom wird nicht angezeigt

UPDATE 20171011

docker run \
   --privileged \
   --net host \
   -v /tmp/.X11-unix \
   -e DISPLAY \
   --name chromium \
   --user myuser \
   -i -t acme/mycontainer:0.1 \
   bash

Chromium- Gtk: cannot open display: [...] org.macosforge.xquartz:0 Fehler wird gestartet

$ chromium-browser --verbose
[37:37:1011/154632.348303:VERBOSE1:breakpad_linux.cc(1978)] Breakpad disabled
[1:1:1011/154632.378280:VERBOSE1:zygote_main_linux.cc(537)] ZygoteMain: initializing 0 fork delegates
[1:1:1011/154632.378653:INFO:cpu_info.cc(50)] Available number of cores: 4
[37:37:1011/154632.381303:WARNING:browser_main_loop.cc(275)] Gtk: cannot open display: \
      /private/tmp/com.apple.launchd.Y2wR3QWw57/org.macosforge.xquartz:0

Auf meinem Mac bearbeitet sshd_config

sudo vim /etc/ssh/sshd_config
X11Forwarding yes
X11DisplayOffset 10
XAuthLocation /opt/X11/bin/xauth

Auf meinem Mac DISPLAY

$ env | grep DISPLAY
DISPLAY=/private/tmp/com.apple.launchd.Y2wR3QWw57/org.macosforge.xquartz:0

Auf der Festplatte

ls -al /private/tmp/com.apple.launchd.gCYQToI4lb/*
srw-rw-rw-  1 joel  wheel     0B Oct 11 17:50 
/private/tmp/com.apple.launchd.gCYQToI4lb/org.macosforge.xquartz:0=

1
Hast du damit etwas erreicht, @zabumba?
Damian Powell

Antworten:


2

Ihr Bedürfnis erinnert mich an den Subuser . Es wurde entwickelt, um Endbenutzeranwendungen in einem Docker-Container auszuführen, um die Privatsphäre zu schützen und die Sicherheit zu erhöhen.


Denken Sie daran, die Frage zu bewerten. Sehen Sie nach, ob jemand anderes helfen kann. Ich mag Ihren Zeiger auf Subuser. das ist interessant
zabumba

subuserkönnte das "Qubes OS lite" sein, nach dem ich gesucht habe! Vielen Dank!
Dave

1

Ich habe keinen Mac zum Experimentieren, aber hier einige allgemeine Vorschläge:

X11 ist normalerweise mit einer Schlüsseldatei geschützt, die nur von dem Benutzer gelesen werden kann, dem die Anzeige gehört. Daher wird mithilfe der Dateisystemberechtigungen bestätigt, dass nur andere Programme, die diese Datei lesen können, eine Verbindung herstellen können. Die Clients lesen diese Datei und wiederholen ihren Inhalt über den Socket auf dem Server. Ich denke, Sie waren auf dem richtigen Weg

-e XAUTHORITY=/.Xauthority \
-v ~/.Xauthority:/.Xauthority:ro \

Als Nächstes zeigen Sie die SSH X11-Weiterleitungseinstellungen an, aber keinen Hinweis darauf, dass Sie in den Docker-Container ssh. Die SSH-Weiterleitung wird normalerweise verwendet von:

ssh $HOST -X program-which-launches-gui

Dazu müssen Sie einen SSH-Server im Docker-Container ausführen, was ein wenig Aufwand bedeutet ...

Als nächstes zeigen Sie eine, DISPLAY=/path/to/socketdie ich vorher nicht benutzt habe. Wenn dies eine MacOS-Erfindung ist, versteht das Docker-Ubuntu dieses Format möglicherweise nicht.

Schließlich können Sie mit dem Befehl 'strace' im Docker-Container sehen, was Chrome tatsächlich versucht.

strace chromium-browser 2>&1 | egrep "open|stat|connect|bind"

Dies kann Ihnen helfen, einzugrenzen, welche bestimmten Vorgänge fehlschlagen, bevor sie aufgeben.


Ich werde Ihnen das Kopfgeld wegen der guten Hinweise geben, aber ich habe das Problem nicht gelöst. Ich werde ein weiteres Kopfgeld erstellen, um zu sehen, ob jemand anderes helfen kann. Stellen Sie schließlich eine Docker-Datei bereit. thx
zabumba
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.