docker all'interno del contenitore docker

Voglio installare il docker all'interno di un contenitore di dock in esecuzione.

docker run -it centos:centos7 

Il mio contenitore di base utilizza centos, posso accedere al contenitore in esecuzione utilizzando il docker exec . Ma quando cerco di installare il docker all'interno di esso utilizzando yum install -y docker che installa.

Ma in qualche modo non posso avviare il servizio docker -d & con docker -d & , mi dà errore come:

 INFO[0000] Option DefaultNetwork: bridge WARN[0000] Running modprobe bridge nf_nat br_netfilter failed with message: , error: exit status 1 FATA[0000] Error starting daemon: Error initializing network controller: Error initializing bridge driver: Setup IP forwarding failed: open /proc/sys/net/ipv4/ip_forward: read-only file system 

C'è un modo in cui posso installare il docker all'interno del contenitore docker o creare un'image già dotata di docker in esecuzione? Ho già visto questi esempi ma nessuno funziona per me.

L'output di uname -r sulla macchina host:

 [[email protected] ~]$ uname -r 4.2.6-200.fc22.x86_64 

Qualsiasi aiuto sarebbe apprezzato.

Grazie in anticipo

Aggiornare

Grazie a https://stackoverflow.com/a/38016704/372019 voglio mostrare un altro approccio.

Invece di montare il binario del docker dell'host, dovresti copiare o installare un rilascio specifico del contenitore del binario docker . Dal momento che lo si utilizza solo in modalità client, non sarà necessario installarlo come servizio di sistema. È comunque necessario montare la presa Docker nel contenitore in modo da poter comunicare facilmente con il motore Docker dell'host.

Supponendo che hai un'image di base con un binario Docker funzionante (ad esempio l' image ufficiale del docker ), l'esempio ora sembra questo:

docker run\ -v /var/run/docker.sock:/var/run/docker.sock\ docker:1.12 docker info


Senza rispondere effettivamente alla tua domanda ti suggerisco di leggere con Docker-in-Docker per il tuo ambiente CI o per il test? Pensa due volte .

Spiega perché l'esecuzione di docker-in-docker dovrebbe essere sostituita da una configuration in cui i contenitori Docker eseguono come fratelli e sorelle del contenitore "esterno" o "base". L'articolo si collega anche all'originale progetto https://github.com/jpetazzo/dind where è ansible trovare esempi di lavoro come eseguire Docker in Docker – nel caso in cui si desidera ancora fare docker-in-docker.

Un esempio di come abilitare un contenitore per accedere al demone Docker dell'host è simile a questo:

 docker run\ -v /var/run/docker.sock:/var/run/docker.sock\ -v /usr/bin/docker:/usr/bin/docker\ busybox:latest /usr/bin/docker info 

Se sei in Mac con Docker toolbox.

Il command sotto non functionrà

 docker run\ -v /var/run/docker.sock:/var/run/docker.sock\ -v /usr/bin/docker:/usr/bin/docker\ busybox:latest /usr/bin/docker info 

Poiché /var/run/docker.sock non verrà sul file system OSX

il demone Docker è in esecuzione all'interno del boot2docker VM – e qui è la socket unix.

Quindi è necessario eseguire il contenitore dal boot2docker VM

 $ docker-machine ssh default $ docker run\ -v /var/run/docker.sock:/var/run/docker.sock\ -v $(which docker):/usr/bin/docker\ busybox:latest /usr/bin/docker info $ exit 

Questo sembra Docker-in-Docker, sembra Docker-in-Docker, ma non è Docker-in-Docker, quando questo contenitore creerà più contenitori, questi contenitori verranno creati nel Docker di primo livello.

Hai bisogno del parametro --privileged .

Per impostazione predefinita, i contenitori Docker sono "non privilegiati" e, per esempio, non possono eseguire un demone Docker all'interno di un contenitore Docker.

fonte

Esegui l'image di base con il command docker run --privileged -it centos:centos7 bash . Quindi puoi installare ed eseguire un altro contenitore docker all'interno di quel contenitore.