You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask应用Docker容器内可访问,外部调用遇连接重置问题求助

问题排查与解决:本地访问Docker内Flask应用出现连接重置

现象总结

  • 本地主机执行 curl localhost:1111 返回错误:curl: (56) Recv failure: Connection reset by peer
  • 通过 docker exec 进入容器后,执行 curl localhost:1111 完全正常
  • Flask核心配置:
    app.run(host='0.0.0.0', port=1111)
    
  • Dockerfile及运行命令如下:

我的Dockerfile

FROM python:latest
WORKDIR /home/administrator/DirectoyHidden
COPY ./requirements.txt .

RUN pip install -r requirements.txt
COPY . .

EXPOSE 1111
CMD ["python", "main.py"]

运行命令

docker run -d -v volumehidden:/home/administrator/directoryhidden -p 1111:1111 imagehidden

排查与解决步骤

1. 检查本地端口占用情况

本地1111端口可能被其他进程占用,导致Docker端口映射失效:

  • Linux/macOS执行:
    lsof -i :1111
    
  • Windows执行:
    netstat -ano | findstr :1111
    

如果查到占用进程,可终止该进程,或更换端口映射:

docker run -d -v volumehidden:/home/administrator/directoryhidden -p 1112:1111 imagehidden

之后本地访问 localhost:1112 测试。

2. 修正路径大小写不一致问题

注意到Dockerfile中WORKDIR是/home/administrator/DirectoyHidden(存在拼写错误且首字母大写),而挂载卷路径是/home/administrator/directoryhidden。Linux系统路径区分大小写,会导致容器工作目录与挂载卷不匹配,运行的代码可能不是本地挂载的版本。

解决:统一路径大小写,修改Dockerfile的WORKDIR为:

WORKDIR /home/administrator/directoryhidden

重新构建镜像并运行。

3. 检查本地防火墙设置

本地防火墙可能拦截了1111端口的入站请求:

  • Linux:检查ufw或firewalld规则,添加允许1111端口入站的规则
  • Windows:在防火墙高级设置中添加允许1111端口的入站规则

4. 验证容器内应用监听状态

进入容器,确认Flask应用确实在监听0.0.0.0:1111:

docker exec -it <容器ID> bash
netstat -tulpn | grep 1111

如果没有python进程监听0.0.0.0:1111,查看容器日志排查启动异常:

docker logs <容器ID>

5. 修复Docker网络异常

Docker的bridge网络组件偶尔会出现异常,导致端口映射失效:

  • 停止容器:docker stop <容器ID>
  • 重启Docker服务:
    # Linux
    sudo systemctl restart docker
    # Windows
    重启Docker Desktop
    
  • 重新启动容器测试

内容的提问来源于stack exchange,提问作者Ryan Shamu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 17:13:15