Docker部署Django与FastAPI跨容器连接被拒绝[Errno 111]问题求助
问题排查与解决
核心原因
- 容器网络隔离:每个Docker容器默认拥有独立的网络栈,Django容器内的
127.0.0.1指向容器自身,而非宿主机或FastAPI容器,因此无法连接到FastAPI服务。 - 端口映射不匹配: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
相关产品推荐
相关产品推荐

