AWS CodeBuild执行docker-compose build/push命令失败求助
多容器Docker应用CI/CD部署故障排查
Build阶段docker-compose build失败(exit status 1)
- Dockerfile执行错误:查看CloudBuild日志中build阶段的详细输出,定位到Dockerfile里具体失败的命令——比如
npm install依赖拉取失败、apt-get update源不可用、文件路径不存在或权限不足等。 - docker-compose配置问题:
- 本地执行
docker-compose --file=docker-compose-prod.yml config验证配置语法是否合法。 - 确认服务定义中的
build上下文路径是CodeBuild工作目录下存在的路径,镜像标签格式合规。 - 排查
depends_on等依赖配置是否引用了不存在的服务。
- 本地执行
- CodeBuild环境权限/资源限制:
- 检查CodeBuild的IAM角色是否有拉取基础镜像的权限(若用Docker Hub镜像,需确认无限流或已配置认证)。
- 查看CodeBuild实例磁盘使用情况,大镜像构建可能因空间不足失败。
- 环境变量缺失:确认
docker-compose-prod.yml中用到的ECR仓库地址、版本号等环境变量已在CodeBuild项目中配置。
POST_BUILD阶段push时EOF错误
- ECR权限不足:确保CodeBuild的IAM角色包含以下权限:
ecr:GetAuthorizationToken、ecr:InitiateLayerUpload、ecr:UploadLayerPart、ecr:CompleteLayerUpload、ecr:BatchCheckLayerAvailability、ecr:PutImage。 - 镜像标签配置错误:检查
docker-compose-prod.yml中每个服务的image字段是否为ECR完整地址(格式:{AWS账号ID}.dkr.ecr.{区域}.amazonaws.com/{仓库名}:{标签}),标签错误会导致push时连接异常。 - Docker环境兼容性问题:确认CodeBuild环境中Docker daemon与docker-compose版本兼容(如docker-compose v2要求Docker daemon 20.10+),可在buildspec.yml的pre_build阶段添加
docker --version和docker-compose --version命令验证版本。 - 网络配置问题:若CodeBuild部署在自定义VPC中,需确保VPC已配置ECR网关端点,且安全组/网络ACL允许出站到ECR的流量。
配置文件关键检查点
buildspec.yml
- 确认pre_build阶段已正确执行ECR登录命令:
验证环境变量aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $ECR_REPO_URI$ECR_REPO_URI是否正确设置。 - 检查build阶段的docker-compose命令是否传递了必要的构建参数(如
--build-arg)。 - 确认POST_BUILD阶段的push命令正确(如
docker-compose --file=docker-compose-prod.yml push)。
docker-compose-prod.yml
- 移除build阶段不需要的
volumes配置(CodeBuild环境的本地路径与容器路径无关联)。 - 确保每个服务的
image字段指向正确的ECR仓库。
Dockerrun.aws.json
- 确认容器的
image字段与push到ECR的镜像地址完全一致,无拼写错误。
内容的提问来源于stack exchange,提问作者masafood
相关产品推荐
相关产品推荐

