Windows版Docker Desktop的Linux容器无法访问本地服务如何解决
Windows Docker Desktop Linux容器无法访问宿主机本地服务解决方法
问题复现说明
Linux容器内使用host.docker.internal无法访问Windows本地监听的8000、9092端口服务,官方示例测试流程也无法连通。
逐一排查解决步骤
1. 修正本地服务监听地址
- 绝大多数访问失败是因为本地服务仅绑定了
127.0.0.1回环地址,该地址仅允许本机内部访问,Docker容器属于外部网络节点无法访问。 - Windows本地CMD执行
netstat -ano | findstr "监听端口号"(替换为8000或9092),如果返回结果中监听地址为127.0.0.1:端口号,需要修改服务启动配置,将监听地址改为0.0.0.0。 - 测试用的Python HTTP服务启动时就需要指定监听地址:
Python3执行:python -m http.server 8000 --bind 0.0.0.0
Python2执行:python -m SimpleHTTPServer 8000(Python2默认绑定0.0.0.0,无需额外参数)
2. 配置容器hosts映射
低版本Docker Desktop不会自动注入host.docker.internal的域名映射,启动容器时需手动添加参数:
docker run --rm -it --add-host=host.docker.internal:host-gateway alpine sh
进入容器后先执行cat /etc/hosts确认存在host.docker.internal的映射记录,再安装curl执行测试。
3. 调整Windows防火墙规则
Windows防火墙默认拦截Docker容器子网的入站请求,可先临时关闭当前使用网络的防火墙(专用/公用网络),重新执行curl测试:
- 测试连通后,不需要长期关闭防火墙,可在Windows高级防火墙中添加入站规则,允许Docker默认子网
192.168.65.0/24的入站请求,或者单独开放需要的9092、8000端口。
4. 直接使用宿主机物理IP访问
如果域名解析存在异常,可直接使用宿主机的物理IP访问:
- Windows本地CMD执行
ipconfig,找到当前使用的以太网/WiFi网卡对应的IPv4地址 - 容器内执行
curl http://<宿主机IPv4地址>:8000测试连通性,连通后将代码中的host.docker.internal替换为该IP即可。
内容的提问来源于stack exchange,提问作者naveenkumar
相关产品推荐
相关产品推荐

