Docker部署Django前后端项目API请求异常问题求助
解决方案
1. 解决容器内请求127.0.0.1连接拒绝的问题
容器内的127.0.0.1指向容器自身的本地回环,而非宿主机或其他容器。在docker-compose编排的环境中,容器之间必须通过服务名(即docker-compose.yaml中定义的服务名称)通信,你改用event_backend:8001的方向是对的,接下来解决DisallowedHost错误。
2. 修复DisallowedHost错误
这个错误是因为Django后端的ALLOWED_HOSTS配置未包含请求的Host值(此处为event_backend)。
具体操作:
打开后端Django项目的
settings.py,找到ALLOWED_HOSTS配置项:ALLOWED_HOSTS = ['localhost', '127.0.0.1', '你的前端域名/IP']将后端服务名
event_backend添加到列表中,修改后如下:ALLOWED_HOSTS = ['localhost', '127.0.0.1', '你的前端域名/IP', 'event_backend']测试环境可临时用
ALLOWED_HOSTS = ['*'],但生产环境必须指定明确的Host值。确保后端容器的Django服务绑定到
0.0.0.0启动,这样才能接受其他容器的请求。检查docker-compose.yaml中后端服务的command配置:services: event_backend: # 其他配置... command: python manage.py runserver 0.0.0.0:8001必须是
0.0.0.0:8001,而非127.0.0.1:8001,否则服务仅在容器内部可见,外部容器无法访问。
3. 为什么前端AJAX调用正常?
AJAX由浏览器发起请求,请求的Host是你访问前端的域名/IP(比如宿主机IP、localhost或自定义域名),这个值已经在后端的ALLOWED_HOSTS中,因此不会触发DisallowedHost错误;而前端视图函数是在前端容器内部发起请求,Host为event_backend,不在原有配置里,所以才会报错。
内容的提问来源于stack exchange,提问作者j3romeproj
相关产品推荐
相关产品推荐

