目录
在解决问题前,要先树立两个思想:
- 无论是
docker login
命令还是docker pull
命令,无非就是发送请求去harbor
服务器获取数据。那么报错无非就是 网络问题 或者 接收的内容解析报错。docker harbor
的 ui 页面和docker login
、docker pull
中的地址最终映射的是同一台机器的同一个端口。
一、This error may indicate that the docker daemon is not running 报错
docker login 报错截图:
完整报错信息:
error during connect: This error may indicate that the docker daemon is not running.: Post "http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.24/auth":open //./pipe/docker_engine: The system cannot find the file specified.
原因分析:
提示已经非常明显了,本地
docker
服务没有启动,或者启动失败。
解决方案:
启动本地 docker 服务。
二、Get “https://harbor.xxx.cn/v2/”: EOF 报错
docker login 报错截图:
原因分析:
这是因为无法解析 harbor 域名,或者解析后的 ip 和端口网络不通。可能是
harbor
地址写错了,需要重新核对一下域名和端口,比如我这里就是因为域名写错了,当前域名无法解析。
可以用
ping 域名
的方式判断是否可以解析域名,用
telnet ip 端口
判断网络是否开通。
解决方案:
将
harbor
地址修改为正确的域名和端口即可:
如果遇到了 500 Internal Server Error,参考下面的解决方案。
三、500 Internal Server Error 报错
docker login 报错截图:
原因分析:
我这里导致这个问题是nginx代理配置的问题,在我本地机器之间还多了一层 Nginx 进行转发,将 harbor.xxx.cn 域名转发到了 192.168.1.134:8080 下。
具体为什么中间经过一层 Nginx 转发之后就会报
500 Internal Server Error
问题,我这边还没有定位到。
解决方案:
修改本地
hosts
,增加
192.168.1.134 harbor.xxx.cn
配置,直接解析到 Harbor 仓库所在服务器 ip。
四、invalid character ‘<’ looking for beginning of value 报错
出现这个问题有两种情况,一种是
docker login
的时候报这个错,一种是
docker login
不报错,但是
docker pull
报这个错。
我们先说第一种情况:
docker login 报错截图:
原因分析:
如果是 docker login 的时候就报错,是因为域名和端口错误导致的,比如我这里就是因为漏加了端口。那么细心的同学可能就会发现,为什么同样是域名和端口错误,为什么有的时候报
Get "https://harbor.xxx.cn/v2/": EOF
有的时候报
invalid character '<' looking for beginning of value
呢?
Get "https://harbor.xxx.cn/v2/": EOF
:出现这类问题,说明域名无法解析,或者域名解析后的 ip 和端口网络不通。invalid character '<' looking for beginning of value
:出现这类问题,说明当前机器和目标地址的网络是通的,但是目标域名解析后ip对应服务器的 8080 端口是一个 html 页面,所以报了一个<
开头无效字符的错。
解决方案:
将域名和端口修改正确后,如果继续报错
500 Internal Server Error
,可以参考上面第二章通过配置 hosts 的解决方案。我这里增加端口后就可以正常登录了:
如果将域名和端口修改正确后,可以正常登录了,但是拉取失败,可以参考下面的内容。
docker login 成功,但是 docker pull 报错截图:
原因分析:
出现这类问题,如果确定地址没有写错的话,就是域名解析有问题了。虽然提示
Login Succeeded
,但是实际并没有登录成功,可以填一个错误的账号密码试下,还是会成功的。
报错
invalid character '<' looking for beginning of value
说明网络是通的,但是目标域名解析后ip对应服务器的 8080 端口是一个 html 页面,所以报了一个
<
开头无效字符的错。
解决方案:
在本地配置 hosts,将域名和实际 ip 重新配置后,就可以正常拉取了。
配置格式:
ip 域名
。
五、总结:万能解决方案
docker -v
检查 docker 服务是否启动;ping 域名
检查域名是否可以正常解析;telnet ip 端口
检查网络是否通;- 在 hosts 中追加配置
ip 域名
;(不管第2步域名是否可以成功解析到都要配置看看)如果是 Linux 端,检查完以上 4 步基本就可以解决问题了。 - 如果使用的是 Windows 端的
Docker Desktop
,则需要检查下设置中的Docker Engine
,需要给仓库地址设置insecure-registries
白名单。例如:仓库 ip 地址:192.168.1.66:8080,仓库域名地址:harbor.acgkaka.cn:8080,则 Docker Engine 配置如下:(registry-mirrors
为扩展镜像仓库,用于快速拉取镜像,选配){"builder":{"gc":{"defaultKeepStorage":"20GB","enabled":true}},"experimental":false,"features":{"buildkit":true},"insecure-registries":["192.168.1.66:8080","harbor.acgkaka.cn:8080"],"registry-mirrors":["https://docker.mirrors.ustc.edu.cn","https://hub-mirror.c.163.com","https://registry.docker-cn.com"]}
整理完毕,完结撒花~ 🌻
版权归原作者 ACGkaka_ 所有, 如有侵权,请联系我们删除。