多网卡Windows Server上Docker部署React应用公网访问超时问题
问题排查与解决
根据你的场景(Windows Server双网卡,Docker容器本地可访问、公网访问超时),按以下步骤逐一排查:
1. 检查Windows防火墙入站规则
本地通过localhost:80访问走回环接口,防火墙默认允许,但公网网卡的80端口入站流量可能被拦截:
- 打开「Windows Defender防火墙」→「高级设置」→「入站规则」
- 新建规则:选择「端口」→「TCP」→特定本地端口填
80→「允许连接」→勾选「公网」(或所有网络)→命名规则后保存 - 测试公网访问是否恢复
2. 确认Docker端口绑定范围
Docker默认将端口绑定到0.0.0.0(所有网卡),但偶尔会出现仅绑定127.0.0.1的异常:
- 在服务器上执行命令:
netstat -ano | findstr ":80" - 如果输出显示
127.0.0.1:80,说明仅绑定回环,修改docker-compose.yml的端口配置为:ports: - '0.0.0.0:80:80' - 重启容器:
docker-compose down && docker-compose up -d
3. 排查双网卡路由冲突
双网卡同时配置默认网关时,服务器可能通过内网网卡返回公网请求的数据包,导致客户端超时:
- 执行
route print查看路由表,找到两条0.0.0.0开头的默认路由 - 确认公网网卡的网关(
x.x.229.201)的跃点数更低(优先级更高),如果内网网关跃点数更低,修改它的跃点数:- 打开「网络连接」→右键内网网卡→「属性」→「Internet协议版本4(TCP/IPv4)」→「属性」→「高级」→取消「自动跃点」,手动设置一个更大的数值(比如20)
- 临时测试:禁用内网网卡的默认网关,再尝试公网访问
4. 检查Nginx监听配置
如果容器内Nginx仅监听127.0.0.1,即使Docker端口绑定正确,也无法接收外部流量:
- 进入容器查看Nginx配置:
docker exec -it front-prod cat /etc/nginx/conf.d/default.conf - 确认
listen指令为listen 80;或listen 0.0.0.0:80;,而非listen 127.0.0.1:80; - 若配置错误,修改本地
nginx/nginx.conf后重新构建容器:docker-compose build && docker-compose up -d
5. 核实公网网络环境限制
部分云服务商或机房会在网络层面拦截80端口:
- 检查服务器所在服务商的安全组/防火墙规则,确认已开放80端口的入站流量
- 若服务商禁止80端口,可尝试改用其他端口(比如8080),修改
docker-compose.yml的端口为8080:80,同时更新防火墙和安全组规则
内容的提问来源于stack exchange,提问作者Алексей Гладков
相关产品推荐
相关产品推荐

