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

Bitbucket Pipeline运行docker-compose build无报错失败排查

Bitbucket Pipelines docker-compose构建静默失败排查与修复

现有配置

当前使用的bitbucket-pipelines.yml配置如下:

image: python:3.7.4-alpine3.10

pipelines:
  tags:
    ecr-release-*:
      - step:
          services:
            - docker
          caches:
            - pip
          script:
            - pip3 install awscli
            - pip3 install docker
            - pip3 install docker-compose
            - IMAGE="983344321808.dkr.ecr.us-west-2.amazonaws.com/cicd"
            - TAG=${BITBUCKET_BRANCH:-$BITBUCKET_TAG}
            - aws configure set aws_access_key_id "AKIA6J47DSUIAZH466UH"
            - aws configure set aws_secret_access_key "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"
            - eval $(aws ecr get-login --no-include-email --region us-east-1 | sed 's;https://;;g')
            - docker-compose -f docker-compose-dev.yml build
            # - docker push $IMAGE:$TAG

故障现象:Pipeline执行到docker-compose构建步骤时直接退出,控制台无明确错误信息。

故障根因

  • 基础依赖缺失:使用的python:3.7.4-alpine3.10是精简版Alpine镜像,默认不带gcc、musl-dev、libffi-dev、openssl-dev等编译依赖,pip安装docker-compose时需要编译C扩展,缺依赖时安装过程可能无显性报错,但运行时会直接崩溃退出;同时镜像默认不带docker-cli组件,pip安装的docker模块无法正常调用挂载的docker.sock,会直接静默失败。
  • ECR登录区域不匹配:镜像仓库属于us-west-2区域,但登录ECR时指定的是us-east-1,即便docker-compose正常运行,后续拉取/推送镜像也会出现权限错误。
  • 无调试日志:docker-compose build默认日志级别较低,出现底层错误时不会输出详细信息,难以定位问题。
  • 额外风险:配置中硬编码了AWS访问密钥,存在严重的密钥泄露风险,任何人只要能访问仓库代码都能拿到密钥操作对应AWS资源。

修复方案

修正后的完整配置

image: python:3.7.4-alpine3.10

pipelines:
  tags:
    ecr-release-*:
      - step:
          services:
            - docker
          caches:
            - pip
          script:
            # 安装系统层面的编译、运行依赖
            - apk add --no-cache gcc musl-dev libffi-dev openssl-dev docker-cli
            # 批量安装python依赖,减少冗余执行步骤
            - pip3 install --no-cache-dir awscli docker docker-compose
            # 提前校验docker服务连通性
            - docker info
            - IMAGE="983344321808.dkr.ecr.us-west-2.amazonaws.com/cicd"
            - TAG=${BITBUCKET_BRANCH:-$BITBUCKET_TAG}
            # 建议将AK/SK配置为Bitbucket仓库级安全变量,不要硬编码在配置文件中
            - aws configure set aws_access_key_id "$AWS_ACCESS_KEY_ID"
            - aws configure set aws_secret_access_key "$AWS_SECRET_ACCESS_KEY"
            # 修正ECR登录区域为仓库实际所在的us-west-2,使用更稳定的新版登录命令
            - aws ecr get-login-password --region us-west-2 | docker login --username AWS --password-stdin "$IMAGE"
            # 增加--verbose参数输出详细构建日志,方便后续排查问题
            - docker-compose -f docker-compose-dev.yml build --verbose
            # - docker push $IMAGE:$TAG

调整说明

  • 执行pip安装前先通过apk安装Alpine系统依赖,解决python包编译、docker调用的基础环境问题
  • 增加docker info前置校验步骤,在执行构建前先确认docker服务连通性正常,提前暴露问题
  • 修正ECR登录区域和镜像仓库区域一致,替换旧版get-login命令为更稳定的get-login-password方式,避免旧命令兼容性问题
  • 给docker-compose build增加--verbose参数,输出详细构建日志,后续如果再出问题可以直接从日志定位根因
  • 移除硬编码的AWS密钥,替换为Bitbucket提供的安全变量,避免密钥泄露

内容的提问来源于stack exchange,提问作者Kiran S youtube channel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 08:45:16