部署在Docker中的.Net Core 3.1 WebApi端口无法被本地机器访问问题咨询
排查解决步骤
- 确认Docker端口绑定状态
执行docker ps查看目标容器的PORTS列,确认显示为0.0.0.0:40003->40003/tcp。如果仅显示IPv6绑定[::]:40003->40003/tcp,修改启动命令为docker run -it --rm --name myTag -p 0.0.0.0:40003:40003 myTag强制绑定IPv4所有地址即可。 - 检查宿主机端口占用
Windows执行netstat -ano | findstr 40003,Linux/macOS执行lsof -i:40003,确认宿主机40003端口没有被其他进程占用。如果存在占用,要么终止对应进程,要么修改端口映射为其他未占用端口,例如-p 40004:40003后访问http://localhost:40004测试。 - 排查防火墙/安全软件拦截
临时关闭宿主机防火墙、安全防护软件后重试,确认是否是规则拦截了40003端口的入站请求。 - 修复WSL2网络转发异常(如果使用Docker Desktop WSL2后端)
WSL2内核存在端口转发偶发失效的问题,先在WSL2终端执行ip addr查询eth0网卡的IP地址,再在Windows cmd执行以下命令手动添加转发:netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=40003 connectaddress=替换为WSL2的IP connectport=40003 - 检查代码是否硬编码监听地址
确认项目Program.cs/Startup.cs中没有硬编码UseUrls("http://localhost:40003")这类配置,硬编码的监听地址优先级高于环境变量,会导致服务仅监听容器内部环回地址,外部请求无法进入。需要将硬编码改为http://*:40003或者删除硬编码逻辑,完全通过环境变量配置监听地址。 - 排除浏览器侧干扰
不要仅通过浏览器测试,先用curl http://localhost:40003或者postman发起请求,避免浏览器缓存、HTTPS强制跳转规则干扰判断。
内容的提问来源于stack exchange,提问作者Bartosz Kowalczyk
相关产品推荐
相关产品推荐

