Docker run出现invalid reference format错误(状态码125)求排查
docker: invalid reference format 错误 我来帮你拆解这个问题——docker: invalid reference format 错误(伴随退出码125),本质是Docker无法正确识别你指定的镜像引用格式,结合你的命令和上下文,大概率是这几个原因:
1. 环境变量 $ecr_endpoint 未正确赋值
这是最常见的诱因:如果$ecr_endpoint变量为空、未被正确导出,或者解析失败,你的镜像名就会变成/notifier-cli:latest,这显然是不符合Docker镜像命名规范的无效格式。
解决方法:
在执行docker run命令前,先添加一行调试输出确认变量值:
echo "当前ECR端点值: $ecr_endpoint"
如果输出为空或不符合预期,检查脚本中变量的定义逻辑,确保它被正确赋值且用export导出(比如export ecr_endpoint="your-ecr-url")。
2. 换行符与引号的格式问题
你用反斜杠\实现命令换行,但Shell对换行符的要求很严格:反斜杠后面必须紧跟换行,不能有多余空格。另外,变量和字符串的引号组合如果处理不当,也可能导致Shell解析出奇怪的镜像名。
解决方法:
先尝试把命令写成一行测试,排除换行格式问题:
docker run --rm "$ecr_endpoint/notifier-cli:latest" --build-exit-code "$exit_code" --event 'build-end'
如果一行命令能正常运行,再检查换行写法,确保每个\后面直接换行,没有空格或其他字符。
3. 镜像引用本身存在特殊字符
虽然你提到之前相同命令能运行,但如果$ecr_endpoint中包含Shell会自动解析的特殊字符(比如空格、$、!等),也会破坏镜像引用格式。
解决方法:
先手动执行拉取命令,验证镜像引用的有效性:
docker pull "$ecr_endpoint/notifier-cli:latest"
如果拉取失败,说明镜像本身的引用格式有问题,需要修正$ecr_endpoint的内容。
另外补充说明:退出码125是Docker客户端的专属错误码,专门对应「命令本身格式错误」,和你的Dockerfile内容无关——你的Dockerfile设置(ENTRYPOINT+CMD)是完全正常的,问题出在docker run的参数解析环节。
内容的提问来源于stack exchange,提问作者user7898461

