Docker Desktop(Windows)仅引擎运行时登录私有镜像仓库报连接拒绝
问题解决:Docker Desktop运行时无法连接Windows主机端口转发的私有镜像仓库
问题复现
在Kubernetes中部署私有镜像仓库后,通过kubectl port-forward docker-registry-6bc94649d-529hq 443:5000在Windows主机做端口转发:
- Windows主机上用
curl -k https://localhost:443/v2/_catalog -u admin:pass和浏览器均可正常访问仓库 - Docker Desktop引擎未运行时,
docker login 127.0.0.1:443显示登录成功(实际是客户端未连接daemon,无真实请求) - Docker Desktop引擎运行时,执行
docker login 127.0.0.1:443报错:Error response from daemon: Get "http://127.0.0.1:443/v2/": dial tcp 127.0.0.1:443: connect: connection refused,且端口转发无请求记录 - 已添加防火墙规则允许Docker程序连接,关闭防火墙也无效
核心原因
Docker Desktop在Windows默认使用WSL2后端,此时Docker daemon运行在WSL2虚拟机内部:
- 当Docker引擎运行时,
docker客户端实际是和WSL2里的daemon通信,127.0.0.1指向的是WSL2虚拟机的本地回环,而非Windows主机的回环地址 - 你在Windows主机上做的端口转发仅绑定到Windows的回环或局域网IP,WSL2内部无法直接访问Windows主机的
127.0.0.1
解决方案
方案1:使用Windows主机的局域网IP登录
- 查看Windows主机的局域网IP(执行
ipconfig,找到以太网/WLAN的IPv4地址,比如192.168.3.10) - 修改端口转发命令,绑定到所有网卡(确保WSL2能访问):
kubectl port-forward --address 0.0.0.0 docker-registry-6bc94649d-529hq 443:5000 - 执行docker登录命令,替换为Windows局域网IP:
docker login 192.168.3.10:443 -u admin -p pass
方案2:配置Docker daemon信任私有仓库(针对HTTPS自签名或HTTP仓库)
如果你的私有仓库使用自签名证书或HTTP协议,还需要让Docker daemon信任该仓库:
- 打开Docker Desktop设置 -> Docker Engine
- 在配置中添加
insecure-registries字段:{ "insecure-registries": ["192.168.3.10:443"], "registry-mirrors": [], "debug": false, "experimental": false } - 点击"Apply & Restart"重启Docker daemon
- 再次执行登录命令即可
方案3:映射WSL2端口到Windows主机(可选)
如果需要在WSL2内部也能访问,可手动添加WSL2到Windows的端口转发(以管理员身份打开PowerShell):
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=443 connectaddress=$(wsl hostname -I | cut -d' ' -f1) connectport=443
内容的提问来源于stack exchange,提问作者Joseph Wright
相关产品推荐
相关产品推荐

