无法连接到包含主机名的本地 docker 注册表
Unable to connect to local docker registry with hostname included
OS版本:RHEL 8.4
Docker版本:20.10.6
我已经使用命令部署了本地容器注册表
docker 运行 -d -p 5000:5000 --restart=always --name registry registry:2
使用以下配置 /etc/docker/daemon.json 以使用不安全的注册表
{
"insecure-registries" : [ "localhost:5000", "test123:5000" ]
}
我的本地主机名设置为:test123
但是在使用主机名连接或推送图像到注册表时失败
测试以下 curl 命令是否适用于“localhost”
# curl http://localhost:5000/v2/_catalog
{"repositories":["testcontainerimage"]}
但是主机名失败并超时
# curl http://test123:5000/v2/_catalog
是否有 way/workaround 可以使用主机名“test123”而不是“localhost”访问注册表
分辨率
根据 Andrew 的评论,问题与防火墙有关
RHEL8 已将防火墙框架从 iptables 更改为 nftables。
因此我禁用了 docker,
的 iptables
在 /etc/docker/daemon.json 中添加 "iptables": false
并重新启动 docker
您可以在 /etc/hosts 文件中添加一个条目,如下所示
127.0.0.1 test123
使用 test123: 进行 curl 测试是一个很好的测试 -- 这表明问题出在注册表上,而不是 docker 客户端试图从中提取。
请注意,虽然“localhost”和您的主机名都表示“我的机器”,但它们并不相同 -- localhost 是一种特殊的(“环回”)网络接口,它仅连接到本地机器,而您的主机名将参考您机器的实际网络地址。这可以解释为什么一个有效而另一个无效。
这意味着注册表没有在网络接口上侦听,或者您有某种网络过滤器或防火墙阻止它。没有错误的连接超时是典型的防火墙行为。
我建议您检查您的 RHEL 服务器的防火墙设置。 https://www.redhat.com/sysadmin/beginners-guide-firewalld
也可能只是名称“test123”没有解析,但如果是这种情况,Wishwa 的建议会解决它。
OS版本:RHEL 8.4 Docker版本:20.10.6
我已经使用命令部署了本地容器注册表 docker 运行 -d -p 5000:5000 --restart=always --name registry registry:2
使用以下配置 /etc/docker/daemon.json 以使用不安全的注册表
{
"insecure-registries" : [ "localhost:5000", "test123:5000" ]
}
我的本地主机名设置为:test123
但是在使用主机名连接或推送图像到注册表时失败
测试以下 curl 命令是否适用于“localhost”
# curl http://localhost:5000/v2/_catalog
{"repositories":["testcontainerimage"]}
但是主机名失败并超时
# curl http://test123:5000/v2/_catalog
是否有 way/workaround 可以使用主机名“test123”而不是“localhost”访问注册表
分辨率
根据 Andrew 的评论,问题与防火墙有关
RHEL8 已将防火墙框架从 iptables 更改为 nftables。 因此我禁用了 docker,
的 iptables在 /etc/docker/daemon.json 中添加 "iptables": false
并重新启动 docker
您可以在 /etc/hosts 文件中添加一个条目,如下所示
127.0.0.1 test123
使用 test123: 进行 curl 测试是一个很好的测试 -- 这表明问题出在注册表上,而不是 docker 客户端试图从中提取。
请注意,虽然“localhost”和您的主机名都表示“我的机器”,但它们并不相同 -- localhost 是一种特殊的(“环回”)网络接口,它仅连接到本地机器,而您的主机名将参考您机器的实际网络地址。这可以解释为什么一个有效而另一个无效。
这意味着注册表没有在网络接口上侦听,或者您有某种网络过滤器或防火墙阻止它。没有错误的连接超时是典型的防火墙行为。
我建议您检查您的 RHEL 服务器的防火墙设置。 https://www.redhat.com/sysadmin/beginners-guide-firewalld
也可能只是名称“test123”没有解析,但如果是这种情况,Wishwa 的建议会解决它。