连接到 docker 在 Gitlab docker 执行程序中启动的容器
Connect to docker container started inside Gitlab docker executor
我们有一个带有 Sysbox (link to the setup) 的 Gitlab 设置,以避免 运行 docker 执行程序处于特权模式。目前 services
属性有效,我们可以与其通信,但无法访问以 dind
开头的容器。这是重现问题的最小 .gitlab-ci.yml
文件:
docker_gitlab_test:
stage: test
image: docker:19.03.13
tags:
- docker # this is our docker executor
services:
- docker:19.03.12-dind
script:
- apk add curl
- mkdir test
- echo "hello world" > test/index.html
- docker run -d -p 8080:80 -v $(pwd)/test:/usr/share/nginx/html:ro --hostname nginx --name nginx nginx
- curl localhost:8080
variables:
DOCKER_DRIVER: overlay2
DOCKER_HOST: tcp://docker:2375
DOCKER_TLS_CERTDIR: ""
curl 命令 returns curl: (7) Failed to connect to localhost port 8080: Connection refused
。 运行 nmap
表示所有端口都已关闭。我知道此设置适用于 privileged
docker 执行程序。我试过在 docker run
命令上设置 --privileged
但无济于事。我尝试了 docker
以外的其他基本图像,但问题仍然存在。我试过 运行 个图像而不是 nginx
但同样的问题发生了。
如何允许 gitlab 作业访问在 dind
上分离的容器 运行?
你能试试 0.0.0.0
而不是 localhost
吗?此外,跑步者的 network_mode
属性 应该是 host
(https://docs.gitlab.com/runner/executors/docker.html)
我们有一个带有 Sysbox (link to the setup) 的 Gitlab 设置,以避免 运行 docker 执行程序处于特权模式。目前 services
属性有效,我们可以与其通信,但无法访问以 dind
开头的容器。这是重现问题的最小 .gitlab-ci.yml
文件:
docker_gitlab_test:
stage: test
image: docker:19.03.13
tags:
- docker # this is our docker executor
services:
- docker:19.03.12-dind
script:
- apk add curl
- mkdir test
- echo "hello world" > test/index.html
- docker run -d -p 8080:80 -v $(pwd)/test:/usr/share/nginx/html:ro --hostname nginx --name nginx nginx
- curl localhost:8080
variables:
DOCKER_DRIVER: overlay2
DOCKER_HOST: tcp://docker:2375
DOCKER_TLS_CERTDIR: ""
curl 命令 returns curl: (7) Failed to connect to localhost port 8080: Connection refused
。 运行 nmap
表示所有端口都已关闭。我知道此设置适用于 privileged
docker 执行程序。我试过在 docker run
命令上设置 --privileged
但无济于事。我尝试了 docker
以外的其他基本图像,但问题仍然存在。我试过 运行 个图像而不是 nginx
但同样的问题发生了。
如何允许 gitlab 作业访问在 dind
上分离的容器 运行?
你能试试 0.0.0.0
而不是 localhost
吗?此外,跑步者的 network_mode
属性 应该是 host
(https://docs.gitlab.com/runner/executors/docker.html)