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

Docker部署Django与FastAPI跨容器连接被拒绝[Errno 111]问题求助

问题排查与解决

核心原因

  1. 容器网络隔离:每个Docker容器默认拥有独立的网络栈,Django容器内的127.0.0.1指向容器自身,而非宿主机或FastAPI容器,因此无法连接到FastAPI服务。
  2. 端口映射不匹配:FastAPI容器运行命令使用-p 8100:8000,但Dockerfile中指定的容器内部服务端口是8100,映射关系错误导致宿主机端口无法正确转发到容器内的服务。

分步解决

1. 创建共享Docker网络

容器需处于同一网络才能通过容器名互相访问:

docker network create app-network

2. 修正FastAPI容器启动命令

  • 将容器加入共享网络
  • 修正端口映射(容器内部端口为8100,对应宿主机8100端口)
docker run -d --name fast_api --network app-network -p 8100:8100 fast_api

3. 修正Django容器启动命令

将容器加入同一个共享网络:

docker run --name sim_app --network app-network -it -p 8000:8000 sim_app

4. 修改Django视图的请求地址

把请求URL从http://127.0.0.1:8100改为FastAPI容器的名称fast_api加容器内部端口8100:

def view_request(request):
    template = 'api/index.html'
    data = requests.get(
        url='http://fast_api:8100'
    )
    ready = data.json()
    
    context = {
        'ready': ready
    }
    return render(request, template, context)

5. 验证FastAPI服务监听配置

确保Dockerfile中的CMD命令正确设置--host 0.0.0.0,让服务监听容器内所有网卡,允许同网络容器访问:

CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8100"]

(注:main.py中if __name__ == '__main__'代码块不会被CMD启动方式执行,无需修改)

额外检查

  • 查看FastAPI容器日志确认服务启动正常:docker logs fast_api
  • 确认Django容器的requirements.txt已包含requests库

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 09:22:56