Docker部署Django服务正常启动但浏览器无法访问问题求助
问题原因及解决步骤
1. curl报错说明
你执行docker exec的报错仅因为所用的python:3.6-slim是精简镜像,默认没有预装curl工具,和Django服务是否正常运行无关。从容器启动日志可以判断,Django开发服务已经正常在0.0.0.0:8000启动。
2. 无法访问的核心修复步骤
第一步:修正ALLOWED_HOSTS配置
你当前配置仅允许127.0.0.1访问,但从Windows宿主机访问Docker容器时,请求来源IP不是容器的本地回环地址,会被Django拦截。修改settings.py中的配置:
# 测试阶段可先设为*允许所有来源访问,生产环境再替换为实际部署的域名/IP ALLOWED_HOSTS = ['*']
修改后需要重新构建镜像并启动容器:
docker build . -t myproj # 先停掉之前运行的旧容器 docker stop 8e6c4e4a58db docker run -p 8000:8000 myproj
第二步:Windows环境访问排查
如果修改配置后还是无法用127.0.0.1:8000访问,按以下顺序排查:
- 检查本地8000端口是否被其他进程占用:Windows cmd执行
netstat -ano | findstr "8000",如果有其他进程占用,可以换端口映射,比如执行docker run -p 8080:8000 myproj,然后访问127.0.0.1:8080 - 如果你用的是WSL2后端的Docker Desktop,尝试用WSL2虚拟机的IP访问:WSL终端执行
ip addr找到eth0网卡的IP,用http://<WSL的IP>:8000访问 - 也可以直接访问Docker容器的IP:执行
docker inspect <容器ID> | findstr "IPAddress"拿到容器IP,直接访问该IP的8000端口
3. 可选优化建议
你的requirements.txt里已经安装了gunicorn,生产环境不要用Django自带的runserver,可以把Dockerfile里的CMD替换为gunicorn启动命令:
CMD gunicorn myproject.wsgi:application -b 0.0.0.0:8000
内容的提问来源于stack exchange,提问作者macmagic
相关产品推荐
相关产品推荐

