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>
。
希望这是有道理的!