AWS ECR镜像未创建求助:GitHub Actions执行成功却无镜像
问题诊断与修复方案
核心问题
你的GitHub Actions工作流执行成功但ECR无镜像,核心是两个关键错误:
- 镜像未匹配ECR命名规则:ECR要求镜像必须以
{ECR注册表地址}/{仓库名}:{标签}的格式命名,你当前只给镜像打了本地标签myservice-service:$(date +%s),ECR无法识别。 - docker-compose push用法错误:docker-compose push不需要指定
--tag参数,它会推送compose配置文件中定义的镜像,而你当前的配置没有关联ECR仓库信息。
修复后的工作流代码
name: Deploy to prod on: push: branches: [ "main" ] jobs: build: name: Build image runs-on: ubuntu-latest steps: - name: Check out code uses: actions/checkout@v2 - name: Configure AWS credentials uses: aws-actions/configure-aws-credentials@v1 with: aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} aws-region: us-west-2 - name: Login to Amazon ECR id: login-ecr uses: aws-actions/amazon-ecr-login@v1 - name: Build, tag, and push docker image to Amazon ECR env: REGISTRY: ${{ steps.login-ecr.outputs.registry }} REPOSITORY: my_repository_name IMAGE_TAG: ${{ github.sha }} run: | # 构建本地镜像 docker-compose build --file ./myservice_docker/docker-compose.yml myservice-service # 给镜像打上ECR要求的完整标签(替换myservice-service为你compose里的实际服务名) docker tag myservice-service:latest ${REGISTRY}/${REPOSITORY}:${IMAGE_TAG} # 推送至ECR docker push ${REGISTRY}/${REPOSITORY}:${IMAGE_TAG}
简化优化方案(可选)
如果你的docker-compose.yml允许修改,可以直接在配置里关联ECR环境变量,让流程更简洁:
在./myservice_docker/docker-compose.yml的服务节点添加镜像定义:
services: myservice-service: build: . image: ${REGISTRY}/${REPOSITORY}:${IMAGE_TAG}
然后工作流中的run步骤可简化为:
docker-compose --file ./myservice_docker/docker-compose.yml build docker-compose --file ./myservice_docker/docker-compose.yml push
注意事项
- 确保ECR仓库
my_repository_name已在us-west-2区域创建。 - 检查AWS凭证权限:必须包含
ecr:GetAuthorizationToken、ecr:PutImage等ECR推送相关权限。
内容的提问来源于stack exchange,提问作者Black Eyed Beans
相关产品推荐
相关产品推荐

