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

Docker Compose启动的Flask应用无法调用本地另一Flask服务问题求助

问题原因

该问题和Redis无关,本质是Docker容器的网络隔离机制导致:

  • 应用A通过docker-compose启动时,运行在独立的Docker容器网络栈内,代码中请求的0.0.0.0或者localhost指向的是容器自身,而非运行应用B的宿主机,自然无法建立连接。
  • 你本地直接运行A、或者终端执行curl请求时,都是在宿主机网络环境下执行,所以可以正常访问同样跑在宿主机5002端口的B。
解决方法

根据你的运行环境选择对应方案即可:

方案1:适配Windows/macOS Docker Desktop环境

Docker Desktop内置了指向宿主机的专用域名host.docker.internal,你只需要修改应用A中的请求地址:

# 把原来的http://0.0.0.0:5002/parse/改成下面的地址
response = requests.post('http://host.docker.internal:5002/parse/', headers=headers, data=data)

修改后重新构建启动A的容器即可正常访问。

方案2:适配Linux Docker环境

Linux Docker默认没有内置上述域名,需要先修改应用A的docker-compose.yaml,给app服务添加宿主机映射:

version: '3'
services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - "5000:5000"
    # 新增下面两行配置
    extra_hosts:
      - "host.docker.internal:host-gateway"
  redis:
    image: "redis:alpine"

再和方案1一样,把A的请求地址改成http://host.docker.internal:5002/parse/,重新启动容器即可。

额外验证项

确认应用B启动时绑定的是0.0.0.0(你当前代码已经配置了app.run(debug=True, host='0.0.0.0', port=5002),符合要求),如果B只绑定127.0.0.1,即使改了地址也会被宿主机规则拦截,无法从容器访问。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 05:57:02