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

在GitHub Actions中从ECR拉取Docker镜像报错:无效引用格式

问题根源

invalid reference format 错误的核心原因是:你在ssh-action的script里使用的$ECR_REGISTRY、$ECR_REPOSITORY、$IMAGE_TAG这三个环境变量,并没有传递到EC2实例的shell会话中。这些变量只存在于GitHub Actions的运行器(ubuntu-latest)环境里,EC2机器上根本不知道它们的值,导致Docker拉取命令变成了无效格式,触发了错误。

解决步骤

1. 传递环境变量到EC2实例

修改appleboy/ssh-action步骤的配置,把需要的变量加到envs参数里,这样这些变量会被注入到EC2的shell环境中:

- name: Docker pull & run from github
  uses: appleboy/ssh-action@master
  with:
    host: ec2-3-86-102-151.compute-1.amazonaws.com
    username: ec2-user
    key: ${{ secrets.ACTIONS_PRIVATE_KEY }}
    # 把需要的环境变量加到这里,用逗号分隔
    envs: GITHUB_SHA,ECR_REGISTRY,ECR_REPOSITORY,IMAGE_TAG
    script: |
        # 避免多余空格,保持命令格式规范
        docker pull $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG

2. 确保EC2实例能访问ECR

EC2实例需要有拉取ECR镜像的权限,并且完成登录:

  • 如果EC2关联了带有AmazonEC2ContainerRegistryReadOnly权限的IAM角色,可以在script里添加登录命令:
script: |
    aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin $ECR_REGISTRY
    docker pull $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG
  • 优先用IAM角色方式,避免在EC2上硬编码AWS凭证。

3. 临时测试方案(不推荐长期使用)

如果只是快速验证,可以直接把变量值硬编码到命令里:

script: |
    docker pull 123456789012.dkr.ecr.us-east-1.amazonaws.com/githubactions:githubactions_image
额外检查点
  • 可以在前面的步骤中添加echo $ECR_REGISTRY命令,验证变量在GitHub Actions运行器中是否正确赋值。
  • 确保Docker命令里的变量引用没有多余空格,避免格式问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 11:20:30