Mac本地运行Docker Registry代理时Docker登录失败原因咨询
问题原因分析
在macOS上使用Docker Desktop时,Docker daemon并非直接运行在macOS宿主系统中,而是运行在后台一个隐藏的Linux虚拟机里,这是导致问题的核心原因:
容器运行代理时成功的逻辑:
当你用docker run -p 5000:5000启动代理容器时,Docker会自动完成端口转发——将Linux虚拟机的5000端口映射到macOS宿主的5000端口。此时执行docker login localhost:5000,实际上是Docker daemon(虚拟机内的进程)访问虚拟机自身的localhost:5000,这个请求会被转发到宿主上的代理容器,因此登录成功。本地运行代理时失败的逻辑:
直接在macOS宿主运行代理时,代理监听的是宿主系统的[::]/0.0.0.0(即宿主的所有网络接口)。但Docker daemon所在的Linux虚拟机,其localhost指向的是虚拟机自身的回环接口,而非宿主的回环接口。由于虚拟机和宿主属于独立的网络环境,虚拟机默认无法直接访问宿主的localhost端口,因此会出现dial tcp [::1]:5000: connect: connection refused错误。
验证方法
如果想验证这个逻辑,可以用macOS宿主的实际局域网IP(比如通过ifconfig en0查看的inet地址)代替localhost执行登录命令:
docker login -u admin -p password <宿主局域网IP>:5000
此时Docker daemon会直接访问宿主的外部网络接口,应该能成功连接到本地运行的代理。
内容的提问来源于stack exchange,提问作者beni0888
相关产品推荐
相关产品推荐

