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

如何解决Cloud Build中Docker Compose容器连接拒绝问题

解决Cloud Build中Docker Compose服务无法被访问的问题

核心问题分析

Cloud Build的每个构建步骤都是独立运行的Docker容器,这些容器共享cloudbuild网络,但每个容器的localhost仅指向自身,无法直接访问其他容器或Cloud Build Worker主机的端口。你之前用localhost:8080访问,实际指向的是curl步骤自身的容器,而非Docker Compose启动的服务容器;同时,Docker Compose执行up -d后服务可能未完全就绪就触发测试,也会导致连接失败。

解决方案

1. 用服务名+容器内部端口替代localhost

在cloudbuild网络中,Docker Compose定义的服务名(比如你的echo)会被自动注册到DNS系统,可直接通过服务名访问容器内部端口(而非映射到Worker主机的端口)。你的echo容器内部端口是80,所以正确的访问地址应该是http://echo:80/param?query/demo。

2. 添加服务就绪等待机制

Docker Compose启动服务后可能需要几秒初始化时间,建议给curl添加重试逻辑,确保服务就绪后再执行测试。

3. 修改后的配置示例

调整cloudbuild.yaml的测试步骤:

steps:
  # 保留原有的gcloud auth、docker-compose up步骤
  - name: 'gcr.io/cloud-builders/docker'
    args: 
      - "compose"
      - '-f'
      - 'snakecharmer-web/docker/docker-compose2.yml'
      - '-f'
      - 'snakecharmer-web/docker/docker-compose-ci.yml'
      - 'up'
      - '-d'
    id: docker-compose
  # 修改curl步骤的访问地址并添加重试
  - name: 'appropriate/curl'
    args:
      - "-v"
      - "--retry"
      - "5"  # 最多重试5次
      - "--retry-delay"
      - "3"  # 每次重试间隔3秒
      - "http://echo:80/param?query/demo"
    id: test-service
    waitFor: [docker-compose]
  # 保留原有的docker-compose down步骤

docker-compose-ci.yml无需额外修改,已正确指定cloudbuild外部网络,确保服务加入到构建步骤共享的网络中。

额外验证建议

  • 可在curl步骤前添加容器状态检查步骤,确认服务已启动:
- name: 'gcr.io/cloud-builders/docker'
  args: ["ps"]
  waitFor: [docker-compose]
  • 也可直接进入compose容器内部验证服务状态:
- name: 'gcr.io/cloud-builders/docker'
  args: ["exec", "echo", "curl", "http://localhost:80/param?query/demo"]
  waitFor: [docker-compose]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 11:43:19