2014-10-07 40 views
25

Sto utilizzando un contenitore docker per creare e distribuire il mio software su una raccolta di ec2. Nello script di distribuzione costruisco il mio software e quindi lo impacchetta in un'immagine di finestra mobile. L'immagine viene trasferita nel mio registro privato, estratta dalle ec2 di produzione e quindi eseguita. Quindi in sostanza dovrò eseguire la finestra mobile all'interno di un container.Esegui finestra mobile all'interno di un contenitore finestra mobile?

Il problema è che non è possibile avviare la finestra mobile sul mio contenitore. Se provo

service docker start 

ottengo

bash: service: command not found 

E se provo

docker -d 

ottengo

2014/10/07 15:54:35 docker daemon: 0.11.1-dev 02d20af/0.11.1; execdriver: native; graphdriver: 
[e2feb6f9] +job serveapi(unix:///var/run/docker.sock) 
[e2feb6f9] +job initserver() 
[e2feb6f9.initserver()] Creating server 
2014/10/07 15:54:35 Listening for HTTP on unix (/var/run/docker.sock) 
[error] attach_loopback.go:42 There are no more loopback device available. 
loopback mounting failed 
[e2feb6f9] -job initserver() = ERR (1) 
2014/10/07 15:54:35 loopback mounting failed 

Il comando servizio non esiste sul contenitore finestra mobile quindi non posso avviare la finestra mobile. Non sono sicuro di cosa dovrei fare ora per avviare il docker, quindi sono un po 'bloccato qui, ogni aiuto è apprezzato.

Un po 'più informazioni

macchina host è in esecuzione Fedora 20 (alla fine sarà in esecuzione amazon Linux su un EC2)

contenitore Docker è in esecuzione CentOS 7.0

host è in esecuzione Docker versione 1.2. 0, costruire fa7b24f/1.2.0

Container è in esecuzione finestra mobile-0.11.1-22.el7.centos.x86_64

+0

C'è una ragione per l'esecuzione di CentOS/finestra mobile 0,11 nel contenitore? Se è dedicato all'esecuzione di Docker è possibile utilizzare CoreOS o qualcosa di simile. – naneau

+0

Il contenitore centos non è completamente dedicato alla docker in esecuzione, quasi tutte le attività sono legate alla creazione e al test del software. Tutto ciò che facciamo è noto per funzionare con successo su CentOS, quindi speravamo di poter continuare a utilizzare CentOS in un contenitore. –

+1

Penso che la "modalità Docker" sarebbe ancora quella di creare un contenitore separato. I contenitori sono particolarmente adatti all'esecuzione di una singola applicazione. Non hanno lo scopo di sostituire compiti meglio eseguiti da una macchina virtuale. Se si dispone di uno stack complesso con molte attività, potrebbe essere utile estendere alcune di queste attività per separare i contenitori. Un esempio di tale attività sarebbe eseguire altri contenitori Docker. – naneau

risposta

37

ne dite di non eseguire la finestra mobile nella finestra mobile ed eseguire la finestra mobile sull'host, ma dall'interno del contenitore docker? Basta montare il docker.sock e finestra mobile binario:

docker run -v /var/run/docker.sock:/run/docker.sock -v $(which docker):/bin/docker [your image]

https://github.com/sameersbn/docker-gitlab utilizza questo metodo per far girare i contenitori docker, dare un'occhiata a questa immagine.

Si può anche dare un'occhiata a: https://registry.hub.docker.com/u/mattgruter/doubledocker/

UPDATE su luglio 2016

L'approccio più recente è quello di utilizzare l'immagine docker:dind, come descritto qui: https://hub.docker.com/_/docker/

Breve riassunto:

$ docker run --privileged --name some-docker -d docker:dind

.210

e poi: $ docker run --rm --link some-docker:docker docker info

+1

-v $ (quale finestra mobile):/bin/docker ha funzionato per me quando eseguivo immagini basate su ubuntu su host ubuntu, ma non funzionava su gentoo host - quindi preferisco installare docker nel contenitore e solo per mappare il file socket – ISanych

+1

Qual è il punto di montaggio della presa docker in un contenitore quando _everything_ sta accadendo sul tuo host e non nel container. – SummerBreeze

+0

Beh, soprattutto perché non sta succedendo "tutto" sull'host. Vedi l'immagine docker-gitlab come esempio. – cthulhu

3

Mentre in quasi tutti i casi vorrei suggerire seguente risposta @ di Cthulhu e non esecuzione "finestra mobile nella finestra mobile", nei casi in cui è necessario (ad esempiouna suite di test che mette alla prova contro la versione multipla finestra mobile), utilizzare il seguente per creare dispositivi di loopback aggiuntivi:

#!/bin/bash 

for i in {0..6} 
do 
    mknod -m0660 /dev/loop$i b 7 $i 
done 

(Tratto da filo per Docker Issue #7058)

2

è possibile eseguire semplicemente finestra mobile all'interno del contenitore finestra mobile utilizzando dind. Provate questa immagine da Girolamo, come segue:

docker run --privileged -t -i jpetazzo/dind

controllare questa pagina per maggiori dettagli:
https://github.com/jpetazzo/dind

Problemi correlati