Docker Desktop 默认将容器端口绑定到 127.0.0.1,导致局域网 IP 无法访问;可通过启用 host 网络、修改端口映射为 0.0.0.0:8080 或检查防火墙/WSL2 配置解决。
Windows 上 Docker Desktop 容器端口映射到宿主机失败,常见表现是:localhost 能访问,但本机局域网 IP(如 192.168.1.105)或外部设备无法访问。这不是容器没运行、也不是应用挂了,而是 Docker Desktop 的网络行为限制导致的——它默认只把映射端口绑定到 127.0.0.1,不自动绑定到宿主机其他 IP 地址。
先验证现象:在宿主机浏览器打开 http://localhost:8080(能通),再尝试用本机局域网 IP 访问 http://192.168.1.105:8080(不通)。如果前者成功后者失败,大概率就是 Docker Desktop 的默认绑定策略所致。
netstat -ano | findstr :8080,看输出中监听地址是 127.0.0.1:8080 还是 0.0.0.0:8080
127.0.0.1,说明端口没暴露给外部网络接口,需继续排查配置从 Docker Desktop 4.34+ 开始,Windows 版本支持真正的 host 模式(需手动开启)。若未启用,--network host 在 Windows 上实际无效。
--network host,例如:docker run -d --network host -p 8080:80 nginx
localhost:8080 和 192.168.x.x:8080 都应可用即使端口映射正确,Windows 防火墙或 WSL2 的网络设置也可能拦截流量。
%USERPROFILE%wslconfig 文件中是否有干扰项,例如:networkingMode=mirrored 或 hostAddressLoopback=true —— 这些实验性配置可能导致端口绑定异常,建议注释掉并重启 WSL:wsl --shutdown
/etc/resolv.conf 未被手动修改,避免 DNS 或路由异常间接影响连接如果不想改 host 模式或调整 WSL 配置,可强制让 Docker Desktop 将端口绑定到所有接口。
docker run 中明确指定宿主机 IP:docker run -d -p 0.0.0.0:8080:80 nginx
docker-compose.yml 中写成:- "0.0.0.0:8080:80"(注意引号和格式)127.0.0.1 绑定,使端口对局域网可见netstat -ano | findstr :8080 确认监听地址变为 0.0.0.0:8080