Harbor通过Nginx反向代理部署后镜像推送报错:first path segment in URL cannot contain colon
遇到这个报错别慌,我之前帮朋友排查过类似问题,大概率是URL解析相关的配置或操作出了问题,咱们从几个常见方向来排查:
镜像标签格式写错了:这是最常见的原因!Docker镜像标签的规范是
[镜像仓库地址[:端口]]/仓库名/镜像名:版本号,要是你不小心在仓库名/镜像名的部分加了冒号(比如写成harbor.example.com/myrepo:imagev1),Docker解析的时候会把myrepo:imagev1当成路径的第一个段,里面的冒号就触发了这个错误。赶紧用docker images看看你的镜像标签,改成正确的格式比如harbor.example.com/myrepo/image:v1再试试。Nginx反向代理的配置有问题:检查下Nginx里的
proxy_pass指令,确保指向Harbor的地址格式正确,比如应该是http://harbor-core:80或者你Harbor容器实际的IP+端口,别在路径部分瞎加冒号。另外也看看有没有错误的rewrite规则,会不会把请求路径改坏了,导致转发给Harbor的URL路径里出现了冒号。可以去Nginx的access.log里看看实际转发的请求URL是什么,一眼就能看出问题。Docker守护进程的仓库配置出错:如果你给Docker配置了insecure-registries,检查一下配置的地址格式对不对,比如应该是
harbor.example.com或者harbor.example.com:8080,别带多余的符号或者把冒号放错位置。
另外可以先测试下直接访问Harbor的API(比如用curl http://你的Harbor域名/v2/),看看能不能正常返回,如果能的话,基本可以排除Harbor本身的问题,重点就放在镜像标签和Nginx配置上啦。
备注:内容来源于stack exchange,提问作者Redover

