【发布时间】:2017-12-03 11:33:09
【问题描述】:
我想通过 docker-in-docker 设置与父 docker 容器中的子 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
使用主机网络:
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
令人惊讶的是,我找不到任何关于此的现有文章。这里有人有一些见解吗?
谢谢!
【问题讨论】:
-
我先问你是否确定要使用 docker-in-docker 设置?请先阅读this 博文。
-
@JonesV 我避免进入问题中的特定场景以保持一般性,但既然你问了......我正在写GitLab CI Pipeline Job。 GitLab CI 中的作业在您可以指定的 docker 容器中运行。我正在编写一个基于某些 HTML 生成 PDF 报告的作业,并且我想利用现有的 Docker 映像来执行此操作。所以,我有一个码头工人的情况。我希望这有助于澄清:)
-
恐怕我无法帮助进行 docker-in-docker 设置。我只是想确保您了解博文中提到的要点 =)。
-
我自己也遇到了同样的问题——GitLab CI 使用
docker图像和docker:dind服务,我也可以从我自己的主机连接,但不能在docker容器内连接。非常清晰和恰当的问题!
标签: networking docker docker-in-docker