Ada*_*der 14 networking docker docker-in-docker
我想使用docker-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>
Run Code Online (Sandbox Code Playgroud)
但是当我从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
Run Code Online (Sandbox Code Playgroud)
我没有运气就尝试过几次改装.指定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
Run Code Online (Sandbox Code Playgroud)
使用主机网络:
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
Run Code Online (Sandbox Code Playgroud)
令人惊讶的是,我无法在此找到任何现有文章.这里有人有一些见解吗?
谢谢!
dtk*_*dtk 11
基于尤里的回答:
2)从内部
docker:latest container,[...] 它将在为docker:dind容器设置的任何主机名上可用。在这种情况下,您使用了--name mydind,因此curl mydind:8080[...]
在 Gitlab CI 配置中,您可以通过 DinD 容器的映像名称(除了自动生成的容器名称之外)来寻址 DinD 容器:
访问服务
假设您需要一个 Wordpress 实例来测试一些 API 与您的应用程序的集成。
然后,您可以在您的以下文件中使用例如tutum/wordpress图像
.gitlab-ci.yml:Run Code Online (Sandbox Code Playgroud)services: - tutum/wordpress:latest如果您未指定服务别名,则在作业运行时
tutum/wordpress将启动,您将可以从构建容器中访问它,并在两个主机名下进行选择:
tutum-wordpresstutum__wordpress
使用
service:
- docker:dind
Run Code Online (Sandbox Code Playgroud)
将允许您访问该容器docker:8080:
script:
- docker run -d -p 8080:80 httpd:alpine
- curl docker:8080
Run Code Online (Sandbox Code Playgroud)
编辑:如果您更喜欢更明确的主机名,则可以如文档所述,使用alias:
services:
- name: docker:dind
alias: dind-service
Run Code Online (Sandbox Code Playgroud)
进而
script:
- docker run -d -p 8080:80 httpd:alpine
- curl dind-service:8080
Run Code Online (Sandbox Code Playgroud)
hth, dtk
小智 9
DinD和bind安装Docker插槽都有利有弊,两者肯定都有用例.例如,查看这组博客文章,它可以很好地解释其中一个用例.
鉴于上面的docker-in-docker设置示例,您可以通过以下两种方式之一访问Apache httpd服务器:
1)从docker:dind容器内部,它将可用localhost:8080.
2)从docker:latest您最初尝试访问它的容器内部,它将在docker:dind容器的任何主机名上可用.在这种情况下,你使用--name mydind,因此curl mydind:8080会给你标准的Apache <html><body><h1>It works!</h1></body></html>.
希望它有意义!
| 归档时间: |
|
| 查看次数: |
3299 次 |
| 最近记录: |