You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在GitLab流水线的Docker-in-Docker服务中访问构建容器?

解决GitLab DinD流水线中Nginx无法访问主应用的问题

问题根源

DinD是独立的Docker守护进程,它启动的容器(Nginx、Postgres等)运行在自身的网络环境中,无法直接解析GitLab CI作业容器的主机名(比如你尝试的build)。FF_NETWORK_PER_BUILD仅能让CI作业容器和DinD服务容器处于同一网络,但DinD内部的容器与CI作业容器仍属于不同的网络层级,因此无法通过自定义主机名访问。

解决方案

1. 配置DinD允许访问CI作业容器

在DinD服务的变量中添加DOCKER_OPTS,让其内部容器可以通过host.docker.internal访问CI作业容器的服务:

# .gitlab-ci.yml 中 DinD 服务配置修改
services:
  - name: docker:28.2.2-dind
    alias: docker
    pull_policy: if-not-present
    variables:
      HEALTHCHECK_TCP_PORT: "2375"
      DOCKER_OPTS: "--add-host=host.docker.internal:host-gateway"

2. 修改Nginx代理地址

将Nginx配置中的静态IP替换为host.docker.internal,这个地址会被DinD解析为CI作业容器的IP:

# docker-compose.yml 中 nginx_config 修改
nginx_config:
  content: |
    error_log /var/log/nginx/error.log info;

    # proxy to app
    server {
      listen                 443 ssl;
      ssl_certificate        nginx.crt;
      ssl_certificate_key    nginx.key;
      ssl_client_certificate ca.crt;
      ssl_verify_client      on;

      location / {
        proxy_set_header X-SSL-Client-S-DN $$ssl_client_s_dn;
        proxy_pass http://host.docker.internal:8080;
      }
    }

    # proxy to auth
    server {
      listen                        444;
      proxy_ssl_certificate         nginx.crt;
      proxy_ssl_certificate_key     nginx.key;
      proxy_ssl_trusted_certificate ca.crt;

      location / {
        proxy_pass "https://host.docker.internal:3000$$request_uri";
      }
    }

同时移除.gitlab-ci.yml中不必要的sed替换命令:

# 删掉这两行
- sed -i -e s/172.17.0.1:8080/build:8080/g docker-compose.yaml
- sed -i -e s/172.17.0.1:3000/docker:3000/g docker-compose.yaml

3. 确保应用绑定0.0.0.0

检查你的主应用和Auth服务的启动配置,确保它们绑定到0.0.0.0而非仅127.0.0.1,否则DinD容器无法访问这些端口。

4. 调整测试容器的网络访问

你的Playwright测试容器使用了--network host,它会共享CI作业容器的网络,因此访问Nginx时可以直接用localhost:8443,确保APP_ORIGIN等变量配置正确:

export APP_ORIGIN="localhost:8443"

验证步骤

流水线运行时,通过docker compose logs nginx确认Nginx不再出现"无法找到build主机"的错误,同时检查应用日志确认代理请求正常转发。

内容的提问来源于stack exchange,提问作者James Ayres

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 22:33:13