同一局域网下Mac无法通过域名登录自托管Docker Registry,其他设备正常
问题原因分析
该问题的核心诱因是Mac版Docker Desktop的网络栈与Mac本地系统网络栈相互隔离,所有Docker daemon发起的请求均运行在Docker Desktop内置的Linux虚拟机中,和Mac本地的网络配置、DNS解析规则并不完全同步,符合现象的高频原因如下:
- 原因1:Docker daemon的DNS解析配置错误,没有使用局域网DNS服务器,导致
my.sub.domain.com被解析为公网IP,而你的路由器不支持NAT回流(内网设备访问本网段的公网IP会被拦截),因此请求失败返回503。树莓派用的是局域网DNS解析到内网IP、外部网络直接访问公网IP均不受该问题影响,和你的测试结果完全吻合。 - 原因2:Docker Desktop开启了全局HTTP/HTTPS代理,且没有将内网域名加入代理排除列表,导致内网请求被转发到代理节点无法正常到达反向代理。
- 原因3:Docker Desktop内置网络规则冲突,内网网段路由配置错误。
排查与解决步骤
- 验证Docker daemon侧的域名解析结果
执行以下命令查看Docker虚拟机内部的域名解析结果,确认是否和Mac本地dig结果一致:
docker run --rm busybox nslookup my.sub.domain.com
如果返回的IP不是192.168.0.12,说明是DNS解析问题,可通过以下两种方式修复:
- 打开Docker Desktop设置 → Resources → Network,手动将DNS服务器修改为你家局域网的DNS地址(通常为路由器IP如192.168.0.1),保存后重启Docker即可。
- 也可以直接在Docker Desktop的hosts配置中添加静态映射:192.168.0.12 my.sub.domain.com,或在Mac本地
/etc/hosts添加该映射后开启Docker Desktop的「使用宿主hosts文件」开关。
检查Docker代理配置
打开Docker Desktop设置 → Resources → Proxies,如果你开启了手动代理配置,务必在No proxy列表中添加my.sub.domain.com,192.168.0.0/16,避免内网请求走代理,保存重启后重试。验证Docker侧的网络连通性
如果上述配置无误,分别执行以下两条命令对比返回结果:
# Mac本地发起请求 curl -v https://my.sub.domain.com/v2/ # Docker虚拟机内部发起请求 docker run --rm curlimages/curl -v https://my.sub.domain.com/v2/
如果本地curl返回正常,Docker侧的curl返回503,可进一步查看反向代理的访问日志,确认请求是否到达反向代理、Host头是否传递正确,排查Nexus侧是否有访问限制。
内容的提问来源于stack exchange,提问作者user2366975
相关产品推荐
相关产品推荐

