2017-06-29 14 views
2

Ich möchte mit einem Andock-Container für den untergeordneten Container von einem übergeordneten Docker-Container mit einem Andock-in-Docker-Setup vernetzen.Docker-Container-Netzwerk mit Docker-in-Docker

Angenommen, ich versuche, eine Verbindung zu einem einfachen Apache httpd-Server herzustellen. Als ich den httpd Container auf meinem Host-Maschine laufen, funktioniert alles einwandfrei:

asnyder:~$ docker run -d -p 8080:80 httpd:alpine 
asnyder:~$ curl localhost:8080 
<html><body><h1>It works!</h1></body></html> 

Aber wenn ich das gleiche tun von einem Docker-in-Docker Setup, erhalte ich eine Connection refused Fehler:

asnyder:~$ docker run -d --name mydind --privileged docker:dind 
asnyder:~$ docker run -it --link mydind:docker docker:latest sh 
/# docker run -d -p 8080:80 httpd:alpine 
/# curl localhost:8080 
curl: (7) Failed to connect to localhost port 8080: Connection refused 

Ich habe ein paar Änderungen ohne Glück versucht. die 0.0.0.0 Schnittstelle Angeben:

asnyder:~$ docker run -d --name mydind --privileged docker:dind 
asnyder:~$ docker run -it --link mydind:docker docker:latest sh 
/# docker run -d -p 0.0.0.0:8080:80 httpd:alpine 
/# curl 0.0.0.0:8080 
curl: (7) Failed to connect to 0.0.0.0 port 8080: Connection refused 

das Host-Netzwerk verwenden:

asnyder:~$ docker run -d --name mydind --privileged docker:dind 
asnyder:~$ docker run -it --link mydind:docker docker:latest sh 
/# docker run -d --network host httpd:alpine 
/# curl localhost:80 
curl: (7) Failed to connect to localhost port 80: Connection refused 

Überraschenderweise konnte ich nicht alle vorhandenen Artikel zu diesem Thema finden. Hat hier jemand Einblick?

Danke!

+0

Lassen Sie mich zuerst fragen, wenn Sie sicher sind, dass Sie ein Docker-in-Docker-Setup möchten? Lesen Sie zuerst [this] (http://jpetazzo.github.io/2015/09/03/do-not-use-docker-in-docker-for-ci/) Blogpost. – JonesV

+0

@JonesV Ich vermied es, in das spezifische Szenario in der Frage zu kommen, um es allgemein zu halten, aber da du gefragt hast ... Ich schreibe einen [GitLab CI Pipeline Job] (https://docs.gitlab.com/ee/ci/yaml /). Jobs in GitLab CI werden in einem Andockcontainer ausgeführt, den Sie angeben können. Ich schreibe einen Job, der basierend auf HTML einen PDF-Bericht erstellt. Dazu möchte ich ein vorhandenes Docker-Image nutzen. Also, ich habe eine Docker-in-Docker-Situation. Ich hoffe, das hilft zu klären :) –

+0

Ich fürchte, ich kann nicht mit dem Docker-in-Docker-Setup helfen. Ich wollte nur sichergehen, dass dir die Punkte bekannt sind, die im Blog post =) erwähnt werden. – JonesV

Antwort

1

Es gibt Vor-und Nachteile für beide DinD und binden die Docker-Buchse zu binden und es gibt sicherlich Anwendungsfälle für beide. Schauen Sie sich zum Beispiel this set of blog posts an, was einen der Anwendungsfälle erklärt.

Ihr Beispiel Docker-in-Docker Bei Setup oben können Sie Apache-Server auf zwei Arten zugreifen:

1) Aus dem Innern des docker:dind Container, wird es auf localhost:8080 zur Verfügung.

2) Von innerhalb des docker:latest Containers, wo Sie ursprünglich versucht haben, darauf zuzugreifen, wird es auf jedem Hostnamen verfügbar sein, der für den docker:dind Container festgelegt ist. In diesem Fall haben Sie --name mydind verwendet, daher würde curl mydind:8080 Ihnen den Standard Apache geben.

Ich hoffe, es macht Sinn!