RHEL8.4环境下使用主机名访问本地Docker镜像仓库失败问题排查
RHEL 8.4 环境下Docker本地镜像仓库使用主机名访问失败解决方案
环境信息
- 操作系统版本:RHEL 8.4
- Docker版本:20.10.6
问题描述
通过如下命令部署了本地容器镜像仓库:
docker run -d -p 5000:5000 --restart=always --name registry registry:2
为适配非安全镜像仓库访问规则,已在/etc/docker/daemon.json中添加如下配置:
{ "insecure-registries" : [ "localhost:5000", "test123:5000" ] }
本地主机名设置为test123,但使用主机名连接或推送镜像均失败。测试发现使用localhost访问正常:
# curl http://localhost:5000/v2/_catalog {"repositories":["testcontainerimage"]}
使用主机名执行相同请求则超时:
# curl http://test123:5000/v2/_catalog
解决方案
该问题由防火墙框架适配问题导致:RHEL 8默认将防火墙框架从iptables替换为nftables,Docker默认自动操作iptables规则的逻辑与nftables不兼容,导致主机名对应的本地地址请求无法正常转发到容器端口。
修复操作步骤如下:
- 编辑
/etc/docker/daemon.json,添加"iptables": false配置项,修改后完整配置参考:
{ "insecure-registries" : [ "localhost:5000", "test123:5000" ], "iptables": false }
- 执行命令重启Docker服务使配置生效:
systemctl restart docker - 若registry容器未自动恢复,可手动重启容器:
docker restart registry
配置完成后再次执行curl http://test123:5000/v2/_catalog,正常返回仓库列表即表示修复完成。
内容的提问来源于stack exchange,提问作者Keyur Barapatre
相关产品推荐
相关产品推荐

