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

Requests库调用Docker容器内Flask服务报[Errno 111] Connection refused如何解决

问题根因

你遇到的连接报错是Docker容器网络的默认寻址规则导致的:
当请求代码运行在Docker容器内时,代码中写的localhost指向的是当前请求容器自身的回环地址,而不是宿主机的地址,自然无法访问到宿主机上映射的5003端口的Flask服务。

对应解决方案

按你的使用场景可选择以下任意一种方案解决:

场景1:两个容器独立部署,不想调整容器启动参数

  • 方案1:将请求地址中的localhost替换为宿主机的实际局域网IP,例如宿主机IP为192.168.1.10,就修改代码为:
    resp = req.get("http://192.168.1.10:5003/")
    
    注意需要提前放行宿主机防火墙5003端口的入站规则。
  • 方案2(仅适配Mac/Windows桌面版Docker):直接用Docker内置的宿主机别名替换localhost,修改代码为:
    resp = req.get("http://host.docker.internal:5003/")
    
  • 方案3(仅适配Linux宿主机):启动请求容器时添加--network="host"参数,让请求容器共享宿主机的网络命名空间,此时容器内的localhost和宿主机完全一致,不需要修改请求代码。

场景2:Flask服务和请求服务都是你自行维护,建议用自定义网络打通

这种方式不需要依赖宿主机IP、也不需要做端口映射,稳定性更高:

  1. 首先创建自定义Docker网络:
    docker network create my-flask-net
    
  2. 启动Flask服务容器时,添加网络和容器名参数:
    docker run -d --network my-flask-net --name flask-app [你的Flask镜像名]
    
  3. 启动请求容器时,也加入同一个自定义网络:
    docker run --network my-flask-net [你的请求代码镜像名]
    
  4. 修改请求代码的地址为Flask容器的名称+容器内部服务端口(默认是5000):
    resp = req.get("http://flask-app:5000/")
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 07:45:02