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

如何在GitHub Actions中使用密钥指定容器镜像?

解决方案

问题根源

你当前的配置有两个核心问题:

  1. 作业级别的container字段会在作业启动阶段就尝试拉取镜像,此时依赖的login-ecr作业的登录凭证不会共享到当前作业的全新runner环境,导致ECR镜像拉取失败。
  2. 虽然GitHub Actions允许在container.image中引用secrets,但未完成ECR登录的runner没有权限拉取私有镜像。

可行方案

放弃作业级别的container配置,改为在作业步骤中先完成ECR登录,再通过docker run启动目标镜像并执行构建命令,既保留secrets引用,又能正常拉取私有镜像:

build-web:
  runs-on: ubuntu-latest
  steps:
    - name: 登录Amazon ECR
      uses: aws-actions/amazon-ecr-login@v1
      env:
        AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
        AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
        AWS_REGION: ${{ secrets.AWS_REGION }}

    - name: 在ECR容器中执行构建
      run: |
        docker run --rm -v ${{ github.workspace }}:/workspace -w /workspace ${{ secrets.AWS_ECR_REPOSITORY }} \
          sh -c "
            # 替换为你的实际构建命令
            npm install
            npm run build
          "

另一种进阶方案(直接用作业级container)

如果坚持使用作业级container,可以通过container.credentials字段直接配置ECR登录凭证,跳过单独的登录作业:

build-web:
  runs-on: ubuntu-latest
  container:
    image: ${{ secrets.AWS_ECR_REPOSITORY }}
    credentials:
      username: AWS
      password: ${{ secrets.AWS_ECR_LOGIN_PASSWORD }}

注:AWS_ECR_LOGIN_PASSWORD需要提前通过aws ecr get-login-password --region <你的区域>命令获取,并存储为GitHub Secrets。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 05:06:06