Come eseguire Chromium da un contenitore docker


9

Ambiente

  • MacOS Sierra 10.12.6
  • Docker versione 17.09.0-ce, build afdb6d4
  • Ubuntu 16.04
  • XQuartz 2.7.9

Voglio aprire il browser Chromium da un contenitore docker sul desktop del mio Mac.

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

Commettere

docker commit 2862a7bfcc2f  acme/mycontainer:0.1

Esecuzione del browser al cromo myuserdal contenitore 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

Scommetto che c'è qualcosa in più

Qualche puntatore?

UDPATE: utilizzo --privileged

Rimuove l'errore Vedi thread su serverfault ma l'interfaccia utente non viene visualizzata

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

e questo

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

Chromium non si presenta

AGGIORNAMENTO 20171011

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

Avvio Gtk: cannot open display: [...] org.macosforge.xquartz:0 dell'errore Chromium

$ 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

Sul mio Mac modificato sshd_config

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

Sul mio Mac DISPLAY

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

Su disco

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
Sei arrivato da qualche parte con questo, @zabumba?
Damian Powell,

Risposte:


2

Il tuo bisogno mi ricorda un utente secondario . È stato progettato per eseguire l'applicazione dell'utente finale in un contenitore docker al fine di proteggere la privacy e aumentare la sicurezza.


ricordati di votare la domanda. vedere se qualcun altro potrebbe essere in grado di aiutare. Mi piace il tuo puntatore al subutente. è interessante
zabumba,

subuserpotrebbe essere il "Qubes OS lite" che stavo cercando! Grazie!
Dave,

1

Non ho un Mac con cui sperimentare, ma ecco alcuni suggerimenti generali:

X11 di solito è protetto con un file chiave che può essere letto solo dall'utente proprietario del display, usando quindi le autorizzazioni del filesystem per affermare che solo altri programmi in grado di leggere quel file sono in grado di connettersi. I client leggono quel file e quindi ripetono il suo contenuto sul server attraverso il socket. Quindi, penso che tu fossi sulla buona strada con

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

Successivamente, vengono mostrate le impostazioni di inoltro di SSH X11 ma nessuna indicazione che sia stato immesso nel contenitore docker. L'inoltro SSH è normalmente utilizzato da:

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

Per fare ciò, dovrai eseguire un server SSH all'interno del contenitore docker, il che è un po 'di sforzo ...

Successivamente, mostri una DISPLAY=/path/to/socketche non ho mai usato prima. Se questa è un'invenzione di MacOS, Ubuntu agganciato potrebbe non capire quel formato.

Infine, puoi vedere cosa Chrome sta effettivamente tentando di fare usando il comando 'strace' dall'interno del contenitore della finestra mobile.

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

Ciò potrebbe aiutarti a restringere quali operazioni specifiche falliscono prima che si arrendano.


Ti darò la generosità a causa dei buoni suggerimenti, ma non ho risolto il problema. Creerò un'altra taglia per vedere se qualcun altro può aiutare. Alla fine fornire un file Docker. thx
zabumba,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.