Docker容器无法Curl访问本地Flask服务问题求助
容器内无法访问主机Flask服务的排查方向
以下是几个大概率的问题点和对应的验证/解决方法:
Flask服务绑定地址错误
Flask默认仅绑定127.0.0.1,这种情况下只有主机本地进程能访问,容器通过host.docker.internal发起的请求属于外部访问,会被拒绝。
解决:启动Flask时强制绑定0.0.0.0,比如执行flask run --host=0.0.0.0,或者在代码里设置app.run(host='0.0.0.0', port=5000)。主机防火墙拦截了5000端口的TCP请求
ping通host.docker.internal仅说明ICMP协议能正常通信,但TCP 5000端口的入站请求可能被主机防火墙(Windows Defender防火墙、Linux的ufw/iptables)拦截。
解决:在主机防火墙中添加规则,允许5000端口的入站TCP连接,尤其是允许来自Docker所属子网的请求。Flask实际监听的端口不是5000
确认Flask服务确实在5000端口监听:- Linux/macOS执行
netstat -anp | grep 5000或ss -tulpn | grep 5000,检查是否有0.0.0.0:5000的监听记录 - Windows执行
netstat -ano | findstr :5000,确认对应PID的进程是Flask服务
- Linux/macOS执行
Docker版本过低导致
host-gateway不生效host-gateway是Docker 20.10.0及以上版本才支持的写法,如果你的Docker版本低于这个,extra_hosts里的配置不会生效。
解决:要么升级Docker到最新稳定版,要么替换host-gateway为主机的实际局域网IP(比如192.168.x.x),再测试容器内访问该IP的5000端口。
内容的提问来源于stack exchange,提问作者vbulash
相关产品推荐
相关产品推荐

