harbor docker客户端登陆失败 X509:cannot validate certificate...
错误如下(博主开始使用的http形式,后来改为https,由于一开始使用的IP,后来生成证书时采用的是域名,没有修改harbor中的hostname配置导致以下错误):
-
iverson@worker:/etc/docker/certs.d/gerrit.backup.com$ sudo docker login gerrit.backup.com
-
Username: amax
-
Password:
-
Error response from daemon: Get https://gerrit.backup.com/v2/: Get https://192.168.121.100/service/token?account=amax&client_id=docker&offline_token=true&service=harbor-registry: x509: cannot validate certificate for 192.168.121.100 because it doesn't contain any IP SANs
此处给出排查思路:
这个错误的原因大多是因为证书相关原因。
首先删除所有签名,然后根据官方配置https文档操作一遍:
https://goharbor.io/docs/2.0.0/install-config/configure-https/
操作后首先检测本地是否可以docker login,如果本地失败,建议重新配置,若多次失败,删除已解压的harbor安装包重新解压部署;
本地docker login成功,异地失败:证书配置没问题,harbor配置有误,此时检测harbor的配置文件中hostname是否与证书生成是配置的域名一样;
/etc/hosts是否添加域名解析。
建议各位看官,在使用harbor时配置域名+https形式,这种形式配置的harbor在客户端想登陆使用时无需重启客户端:
观点1:harbor异地命令行登陆只支持域名形式访问,ip形式也可以访问,需要配置异地客户端docker配置,配置后重启生效,此种形式不推荐,避免客户端有不方便重启的容器。
-
$ cat /etc/docker/daemon.json
-
{
-
"insecure-registries": ["https://192.168.121.100"]
-
}
-
-
# 此形式配置后需要重启docker,如果添加多个仓库,#号为注释:
-
$ cat /etc/docker/daemon.json
-
{
-
"insecure-registries": ["https://192.168.121.100,https://192.168.121.101"]
-
}
观点2:
https在docker中默认使用的,若harbor是http,则需要配置客户端使用http形式,配置后仍需重启,不推荐。