docker私有仓库更改过ip地址,
旧的ip地址是 10.1.28.60
新的ip地址是 10.1.22.70
当尝试从命令行登录时docker login --username=admin 10.1.22.70:9000
错误提示如下:
Error response from daemon
: Get "http://10.1.22.70:9000/v2/"
: Get "http://10.1.28.60:9000/service/token?account=admin&client_id=docker&offline_token=true&service=harbor-registry"
: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
奇怪的地方是,请求新的ip地址10.1.22.70
返回的错误信息里,出现了旧的ip地址10.1.28.60
。这个旧的ip地址是存在哪儿的?要如何清除掉?
另外,客户端 /etc/docker/daemon.json 配置如下:
{
"registry-mirrors": [
"https://hub-mirror.c.163.com",
"https://docker.mirrors.ustc.edu.cn"
],
"insecure-registries": [
"10.1.22.70:9000"
],
"features": {
"buildkit": false
}
}
在更改配置后,已经重新启动:
systemctl daemon-reload
systemctl restart docker.service
另外, /root/.docker/config.json 中似乎保存着旧ip的相关数据,已删除,好像也没什么用。
那么,这个是客户端的问题还是docker私库的问题?有没有可能是 docker私库 返回的旧的ip地址?
感谢解答!
补充:2023-04-24
问题出在harbor私库端。解决步骤:
1、找到harbor安装目录下:harbor.yml
# Configuration file of Harbor
# The IP address or hostname to access admin UI and registry service.
# DO NOT use localhost or 127.0.0.1, because Harbor needs to be accessed by external clients.
hostname: 10.1.28.60
# http related config
http:
# port for http, default is 80. If https enabled, this port will redirect to https port
port: 9000
harbor配置文件中果然保存的有 旧的ip地址10.1.28.60 (由于时间久远,已经忘记了这个 ip 是当初手工设置进来的,还是 harbor安装脚本生成的)
2、修改 hostname 配置后,docker-compose 停止和重启harbor,好像并没有效果。
3、最后找到了CSDN上一篇文章:[https://blog.csdn.net/qq_28077405/article/details/106661572]
重新执行 ./install命令,然后访问正常了。
from chatGPT
这个问题看起来像是 Docker 客户端本地缓存了旧的 IP 地址,然后在向新的地址发送请求时出错了。
在客户端中有一个名为
/etc/hosts
的文件,它可以将主机名映射到 IP 地址。如果 Docker 客户端在先前的请求中将私有仓库的主机名解析为旧的 IP 地址并将其保存到了/etc/hosts
文件中,那么在向新的 IP 地址发送请求时,可能会尝试使用旧的 IP 地址进行请求,导致请求失败。为了解决这个问题,可以尝试在客户端中清除
/etc/hosts
文件中与私有仓库相关的任何旧条目,以便 Docker 客户端在向私有仓库发送请求时能够正确解析主机名并使用新的 IP 地址。另外,你提到了
/root/.docker/config.json
文件中保存了旧的 IP 地址相关的数据,这个文件实际上是 Docker 客户端的配置文件,其中包含 Docker Hub、私有仓库的认证信息等等。如果你已经从中删除了与私有仓库相关的旧 IP 地址的条目,那么这个文件应该不会影响到你的问题。最后,你也可以尝试在 Docker 私有仓库中检查是否存在任何配置文件或设置,这些设置可能会导致 Docker 私有仓库返回旧的 IP 地址。例如,如果私有仓库是通过 Kubernetes 集群进行部署的,那么可能需要检查 Kubernetes 中是否还有任何旧的服务或节点 IP 地址没有更新,这些 IP 地址可能会被用于私有仓库的服务发现。