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

Docker Compose环境下Django容器与Kroki容器内部连接失败求助

问题根因

Docker Compose 默认会为同一配置下的所有服务创建专属内部网络,服务名即为容器间通信的域名,但容器间通信需要使用目标容器内部监听的端口,而非映射到宿主机的端口。
你配置中kroki服务的ports: 7331:8000规则,仅代表将宿主机的7331端口映射到kroki容器内部的8000端口,因此浏览器通过宿主机IP+7331可以正常访问,但同网络的app容器访问kroki时,需要直接连接kroki容器内部的8000端口,而非宿主机映射的7331端口。

修复方案

  • 修改Django请求代码的端口配置,将请求地址从http://kroki:7331/xxx改为http://kroki:8000/xxx即可,修正后代码示例:
url = 'http://kroki:8000/bytefield/svg/' + base64_var
try:
    response = requests.get(url)
    return response.text
except ConnectionError as e:
    print("Connection to bytefield module, unavailable")
    return None
  • 可选优化:如果不需要外部网络直接访问kroki服务,可以删除kroki配置中的ports段,减少端口暴露风险,容器间通信不受影响。
  • 验证方式:进入app容器内部执行curl http://kroki:8000/health,如果正常返回kroki的健康检查结果,说明容器间通信已恢复正常。

其他尝试失败的原因

你之前测试的localhost:7331、127.0.0.1:7331指向的是app容器自身的端口,既不是宿主机端口也不是kroki容器的端口,因此无法连通。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 06:36:06