the*_*tor 3 gitlab docker gitlab-ci
我正在尝试在 Gitlab CI 作业中使用 docker in docker 运行测试。我的理解是,启用 FF_NETWORK_PER_BUILD 标志将自动创建一个用户定义的桥接网络,作业运行程序和该作业中所有创建的泊坞窗将连接到该网络...但是查看 Gitlab 文档我有点困惑...
此页面: https: //docs.gitlab.com/ee/ci/services/
docker:dind给出了使用该服务的示例FF_NETWORK_PER_BUILD: "true"
但使用时docker run它们仍然包含该--network=host标志。
这是给定的示例:
stage: build
image: docker:19.03.1
services:
- docker:dind # necessary for docker run
- tutum/wordpress:latest
variables:
FF_NETWORK_PER_BUILD: "true" # activate container-to-container networking
script: |
docker run --rm --name curl \
--volume "$(pwd)":"$(pwd)" \
--workdir "$(pwd)" \
--network=host \
curlimages/curl:7.74.0 curl "http://tutum-wordpress"
Run Code Online (Sandbox Code Playgroud)
我试图确保此作业中的所有 docker 都位于自己独立的网络上,因此--network=host在此实例中使用该标志是否会将新 docker 连接到实际作业运行程序所在的主机服务器?或者刚刚创建的按职位网络?在什么情况下,您希望创建每个作业网络并仍将新的 docker 连接到主机网络?
如有任何建议,将不胜感激!
在此实例中使用 --network=host 标志是否会将新的 docker 连接到实际作业运行程序所在的主机服务器?或者刚刚创建的按职位网络?
这可能会令人困惑,因为其中的“主机”--network=host并不意味着底层运行程序主机/“裸机”系统中的主机。要了解这里发生了什么,我们必须首先了解该docker:dind服务是如何工作的。
当您使用该服务从构建作业中docker:dind执行命令时,您正在该服务上运行容器;它是 docker 守护进程。dockerdocker:dind
当您提供该--host选项时,它指的是守护程序IE容器docker run 的主机网络docker:dind,而不是底层系统主机。
当您指定时FF_NETWORK_PER_BUILD,就是为构建作业及其封装所有作业容器的服务容器指定 docker 网络。
因此,相关活动按顺序发生如下:
docker:dind和tutum/wordpress:latest服务,连接到步骤 (1) 中创建的网络docker:dind容器并要求它启动一个新curl容器,连接到容器的主机网络docker:dind(与步骤 (1) 中创建的网络相同),从而允许它访问服务容器。如果没有该--network=host标志,创建的容器将位于不同的桥接网络上,并且无法到达从步骤 (1) 创建的网络。
| 归档时间: |
|
| 查看次数: |
4166 次 |
| 最近记录: |