我们有一个带有Sysbox的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命令返回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)