如何在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
相关产品推荐
相关产品推荐

