连接到 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)