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

Docker部署Django应用:localhost访问400错误,127.0.0.1正常

Django + Docker 访问异常问题排查

问题场景

Windows10环境下,Docker部署Django应用后容器运行正常,但访问表现异常:

  • 访问http://localhost:8000返回400 Bad Request
  • 访问http://127.0.0.1:8000可正常打开
  • 访问0.0.0.0:8000无法建立连接

用户提供的配置文件

Dockerfile

FROM python:3.11
# setup env variables
ENV PYTHONBUFFERED=1
ENV DockerHOME=/app/django-app
# Expose port
EXPOSE 8000
# create work dir
RUN mkdir -p $DockerHOME
# set work dir
WORKDIR $DockerHOME
# copy code to work dir
COPY . $DockerHOME
# install dependencies
RUN pip install -r requirements.txt
# move working dir to where manage.py is
WORKDIR $DockerHOME/flag_games
# set default command (I thinkk)
ENTRYPOINT ["python"]
# run commands for app to run
CMD ["manage.py", "collectstatic", "--noinput"]
CMD ["manage.py", "runserver", "0.0.0.0:8000"]

Makefile

docker-build:
    docker build --tag docker-django .

docker-run:
     docker run -d -p 8000:8000 --name flag-game docker-django

settings.py 关键配置

ALLOWED_HOSTS = ['127.0.0.1', '0.0.0.0']

# 其余配置省略...

问题分析与解决

1. localhost:8000 返回400的原因

Django的ALLOWED_HOSTS用于校验请求的Host头,当前配置里没有包含localhost,当请求的Host是localhost:8000时,Django会直接拒绝请求返回400。

修复方法:修改settings.py的ALLOWED_HOSTS,添加localhost:

ALLOWED_HOSTS = ['127.0.0.1', '0.0.0.0', 'localhost']

2. 0.0.0.0:8000 无法连接的原因

0.0.0.0是容器内部的监听地址,代表服务监听容器所有网络接口,但它不是一个可在主机上直接访问的地址。在Windows主机上,你需要用localhost或127.0.0.1来访问Docker映射到主机的端口,直接访问0.0.0.0:8000本身就不符合网络访问逻辑,属于概念误解。

3. Dockerfile的隐藏问题

Dockerfile中如果写了多个CMD指令,只会执行最后一个,所以你写的collectstatic命令实际上没有被执行。

修复方法:将两个命令合并,用shell串联执行,修改Dockerfile最后部分:

ENTRYPOINT ["sh", "-c"]
CMD ["python manage.py collectstatic --noinput && python manage.py runserver 0.0.0.0:8000"]

验证步骤

  1. 完成上述两处配置修改
  2. 重新构建镜像:make docker-build
  3. 重新启动容器:make docker-run
  4. 测试访问:
    • curl http://localhost:8000 应返回200状态码
    • curl http://127.0.0.1:8000 保持正常访问

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 22:25:03