Windows Server(Win11)上Docker容器化Web应用公网访问故障排查咨询
Docker端口绑定范围问题
Windows环境中Docker的端口映射默认可能存在绑定范围限制,检查容器启动命令的端口映射参数,确保是-p 0.0.0.0:80:80(或直接-p 80:80)而非-p 127.0.0.1:80:80——后者仅允许本地访问。执行docker ps查看容器端口状态,确认显示为0.0.0.0:80->80/tcp或[::]:80->80/tcp。WSL2后端的NAT转发缺失
若使用WSL2作为Docker后端,WSL2虚拟机拥有独立内网IP,Windows系统需通过端口代理实现公网流量到WSL2的转发。执行netsh interface portproxy show all检查是否存在对应公网IP到WSL2 IP的80/443端口转发规则,若缺失可手动添加:netsh interface portproxy add v4tov4 listenaddress=你的静态公网IP listenport=80 connectaddress=WSL2虚拟机IP connectport=80 netsh interface portproxy add v4tov4 listenaddress=你的静态公网IP listenport=443 connectaddress=WSL2虚拟机IP connectport=443同时需确保WSL2内部防火墙允许80/443端口的入站流量。
Windows Defender防火墙的进程级拦截
即便已开放80/443端口,Windows Defender可能拦截docker-proxy.exe或wslhost.exe的公网通信。进入防火墙“高级设置”,检查是否存在允许这两个程序通过公网接口的入站规则,若缺失则手动添加,规则需指定适配公网网络类型。Windows Server的网络分类与隔离
Windows Server对网络连接的分类(公网/私网/域)会影响防火墙规则生效范围。确认你的笔记本当前网络被归类为“公网”,且已配置的80/443端口规则明确应用于公网接口——若规则仅绑定私网,公网流量会被拦截。Docker Desktop的网络配置限制
若使用Docker Desktop,进入Settings > Resources > Network,确认勾选“Allow Docker to accept incoming connections”选项。若仍有问题,尝试重启Docker Desktop或执行wsl --shutdown重置WSL2网络后再启动服务,修复可能的转发缓存bug。
内容的提问来源于stack exchange,提问作者maxim-lixakov

