2015-04-13 4 views

risposta

6

Purtroppo no, è necessario utilizzare il flag --privileged per eseguire Docker Docker, si può prendere uno sguardo al official announcement in cui si afferma questo è uno dei tanti scopi della bandiera --privileged.

Fondamentalmente, è necessario un maggiore accesso ai dispositivi del sistema host per eseguire la finestra mobile rispetto a quando si esegue senza --privileged.

+0

Grazie per la risposta, non sembra che questo cambierà presto o in qualsiasi momento - https://github.com/jpetazzo/dind/issues/60 –

+3

Quali dispositivi richiede specificamente la finestra mobile nella finestra mobile? C'è l'opzione '--device' che si intende come una sorta di opzione privilegiata meno invasiva. [Vedi documenti] (https://docs.docker.com/engine/reference/run/#/runtime-privilege-and-linux-capabilities) –

3

Sì, è possibile eseguire la finestra mobile nella finestra mobile senza il flag --privileged. Coinvolge Montaggio della presa finestra mobile al contenitore in questo modo:

docker run -it -v /var/run/docker.sock:/var/run/docker.sock \ 
       -v $(which docker):/bin/docker \ 
       alpine docker ps -a 

che sta andando montare la presa finestra mobile ed eseguibile nel contenitore ed eseguire docker ps -a all'interno del contenitore alpina. Jérôme Petazzoni, che ha creato l'esempio del Dind e ha fatto un sacco di lavoro sulla bandiera --privileged ha avuto questo da dire su finestra mobile nella finestra mobile:

https://jpetazzo.github.io/2015/09/03/do-not-use-docker-in-docker-for-ci/

Ho utilizzato questo approccio per un po 'di tempo ed è funziona piuttosto bene.

L'avvertimento con questo approccio è che le cose si fanno divertenti con l'archiviazione. È meglio utilizzare contenitori di volumi di dati o volumi di dati con nome piuttosto che montare directory. Dato che stai usando il socket docker dall'host, tutte le directory che vuoi montare in un contenitore figlio devono provenire dal contesto dell'host, non dal contenitore genitore. Diventa strano Ho avuto più fortuna con i contenitori di volumi di dati.

+0

Questa dovrebbe essere la risposta accettata qui. – enderland

+3

No, non dovrebbe farlo, dare al contenitore l'accesso al docker degli host non risolve il problema. –

+1

In realtà questo non è ciò che significa dind (Docker-in-Docker). Si sta solo eseguendo il client finestra mobile in un contenitore finestra mobile, non in un server finestra mobile in un contenitore finestra mobile (dind). Inoltre, stai effettivamente dando più superficie di attacco esponendo il socket host che aggiungendo semplicemente il flag '--privileged' al contenitore dind e lasciandogli il proprio socket. – Yajo