Docker容器networking与Docker-in-Docker

我想与一个父docker集装箱中的一个小dockerdocker集装箱进行联网,并使用docker泊位设置。

假设我正在尝试连接到一个简单的Apache httpd服务器。 当我在主机上运行httpd容器时,一切工作正常:

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

但是当我从docker-in-docker设置中执行同样的操作时,出现Connection refused错误:

 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 

我已经尝试了几次改变,但没有运气。 指定0.0.0.0接口:

 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 

使用主机networking:

 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 

令人惊讶的是,我无法find任何现有的文章。 这里有人有一些见解?

谢谢!

对于DinD和绑定Docker套接字都有优点和缺点,两者都有一定的用例。 作为一个例子,看看这组博客post ,它很好地解释了其中一个用例。

根据上面的示例中的docker-in-docker设置,您可以通过以下两种方式之一访问Apache httpd服务器:

1)从docker:dind容器中,它将在localhost:8080上可用。

2)从docker:latest里面docker:latest容器,你最初想要访问它的容器,它将在docker:dind容器设置的任何主机名上可用。 在这种情况下,你使用了--name mydind ,因此curl mydind:8080会给你标准的Apache <html><body><h1>It works!</h1></body></html>

希望这是有道理的!