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

不同docker-compose下Django应用跨容器调用报错如何解决

错误根源
  • 不同docker-compose启动的服务默认归属各自独立的 bridge 网络,网络之间默认隔离,应用1的容器无法解析应用2的容器名web,也无法直接访问应用2的内部服务。
  • 你使用的端口8003是宿主机到应用2容器的映射端口,仅适用于宿主机或外部网络访问,容器内部跨服务访问需要使用应用2容器内部监听的端口8000。
解决方案(推荐:共享Docker网络)
  1. 首先在宿主机执行命令创建公共自定义网络:
docker network create django_shared_net
  1. 分别修改两个应用的docker-compose.yml,在根级别添加网络配置,指定所有服务默认使用刚才创建的公共网络:
networks:
  default:
    external: true
    name: django_shared_net
  1. 修改应用1中的接口请求地址,将端口替换为应用2的内部端口:
# 原错误地址
# http://web:8003/app2_endpoint
# 修改后正确地址
http://web:8000/app2_endpoint
  1. 重启两个docker-compose服务即可正常访问。
备选解决方案(无需调整网络)

如果不想调整Docker网络配置,可以直接通过宿主机IP访问应用2的映射端口:

  • 先查询宿主机的内网IP(不要用127.0.0.1,容器内的127.0.0.1指向容器自身)
  • 将应用1的请求地址修改为http://[宿主机内网IP]:8003/app2_endpoint即可。
验证方法

配置完成后可以进入应用1的Django容器手动验证连通性:

# 进入应用1的django容器
docker exec -it <应用1的django容器名/ID> bash
# 执行curl测试
curl http://web:8000/app2_endpoint

如果能正常返回接口结果说明配置生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 15:36:03