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

如何在Google CloudBuild中配置Docker in Docker (DinD)?

在Google Cloud Build中配置Docker-in-Docker(DinD)运行单元测试

完全可以在Cloud Build中配置DinD来运行依赖Docker的单元测试,下面分两种常见场景给出配置方案,对应你在DroneCI中使用DinD的需求:

方式一:直接使用Cloud Build内置Docker(大部分场景推荐)

Cloud Build的默认执行环境已经预装了Docker,无需额外启动DinD服务,直接运行你的测试脚本即可。这种方式和DroneCI中直接在步骤里调用Docker命令的逻辑一致。

示例cloudbuild.yaml配置:

steps:
  - name: 'gcr.io/cloud-builders/docker'
    entrypoint: 'bash'
    args: ['./your-unit-test-script.sh']

这里使用Cloud Build官方提供的docker构建镜像,它已经包含完整的Docker命令工具,直接执行你的测试脚本即可。

方式二:启动独立DinD服务容器(对应DroneCI的服务模式)

如果你的测试需要完全隔离的Docker daemon环境,或者需要自定义Docker配置,可以像DroneCI那样启动一个后台DinD服务,再让测试步骤连接它。

示例cloudbuild.yaml配置:

steps:
  # 启动后台DinD服务
  - name: 'docker:dind'
    id: 'dind-service'
    entrypoint: 'dockerd'
    args: ['--host', 'tcp://0.0.0.0:2375', '--host', 'unix:///var/run/docker.sock']
    daemon: true  # 标记为后台运行服务
    volumes:
      - name: 'docker-socket'
        path: '/var/run'

  # 运行单元测试,连接到DinD服务
  - name: 'docker:latest'
    entrypoint: 'bash'
    args: ['./your-unit-test-script.sh']
    volumes:
      - name: 'docker-socket'
        path: '/var/run'
    env:
      - 'DOCKER_HOST=tcp://dind-service:2375'  # 通过服务ID连接DinD
volumes:
  - name: 'docker-socket'
    emptyDir: {}

关键配置说明:

  • daemon: true:将DinD步骤标记为后台服务,类似DroneCI中的services字段。
  • 共享卷docker-socket:让测试步骤可以访问DinD的socket文件,确保Docker命令正常工作。
  • DOCKER_HOST环境变量:指定测试步骤连接到后台DinD服务的地址,对应DroneCI中自动注入的服务连接地址。

注意事项

  • 若你的测试脚本硬编码了Docker socket路径(比如/var/run/docker.sock),使用共享卷的方式可以直接兼容,无需修改脚本。
  • 如果测试需要拉取私有镜像,需在Cloud Build中配置对应的镜像拉取凭证(比如GCR的服务账号权限)。
  • 可根据测试资源需求,在Cloud Build触发器中调整CPU、内存配额,避免因资源不足导致测试失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 11:15:36