K3D(Kubernetes)Registry出现“无此主机”错误求助
问题描述
在Mac(M1)环境下使用k3d创建本地镜像仓库后,执行镜像推送命令时出现域名解析失败错误。执行的命令如下:
k3d registry create test-registry.localhost --port 23456 k3d cluster create test-cluster --registry-use k3d-test-registry.localhost:23456 docker tag nginx:latest my-cluster.localhost:12347/mynginx:v0.1 docker push k3d-test-registry.localhost:23456/mynginx:v0.1
错误信息:
The push refers to repository [k3d-test-registry.localhost:23456/mynginx] Get "https://k3d-test-registry.localhost:23456/v2/": dialing k3d-test-registry.localhost:23456 with direct connection: resolving host k3d-test-registry.localhost: lookup k3d-test-registry.localhost: no such host
预期行为:k3d-test-registry.localhost 应被解析到localhost:23456,正常处理镜像推送;若无法自动配置,创建registry或集群时应给出提示。系统环境:Mac(M1)、Docker 20.10.23 build 7155243。
解决方案
1. 手动添加hosts解析
k3d在Mac环境下不会自动将registry域名写入本地hosts,需手动添加:
打开终端编辑hosts文件:
sudo nano /etc/hosts
添加一行解析规则:
127.0.0.1 k3d-test-registry.localhost
保存退出(按Ctrl+O回车确认,再按Ctrl+X退出)。
2. 确认registry容器运行状态
先检查registry容器是否正常启动:
docker ps | grep test-registry
确保容器状态为Up,且端口映射0.0.0.0:23456->5000/tcp存在。
3. 统一镜像tag与推送的域名
你tag镜像时用的是my-cluster.localhost:12347,但推送目标是k3d-test-registry.localhost:23456,两者需保持一致。修正tag命令:
docker tag nginx:latest k3d-test-registry.localhost:23456/mynginx:v0.1
再执行推送:
docker push k3d-test-registry.localhost:23456/mynginx:v0.1
4. 配置Docker允许非HTTPS访问本地registry
Mac上Docker默认要求registry使用HTTPS,本地自建registry为HTTP协议,需添加到不安全registry列表:
- 打开Docker Desktop偏好设置
- 进入
Docker Engine选项卡 - 在配置JSON中添加:
"insecure-registries": ["k3d-test-registry.localhost:23456"]
- 点击
Apply & Restart重启Docker
5. 重建集群(可选)
若上述步骤无效,删除现有资源后重新创建:
k3d cluster delete test-cluster k3d registry delete test-registry.localhost k3d registry create test-registry.localhost --port 23456 k3d cluster create test-cluster --registry-use k3d-test-registry.localhost:23456
再重复步骤1-4操作。
内容的提问来源于stack exchange,提问作者user3162553
相关产品推荐
相关产品推荐

