Docker容器运行Django应用报错:无法分配IP地址求助
核心问题1:错误的绑定IP
你最初在Dockerfile里指定的8.8.0.0是Google的公共DNS服务器IP,容器内部的网络接口根本无法绑定这个外部公网IP,这直接触发了Error: That IP address can't be assigned to.的报错。
核心问题2:修改Dockerfile后未重新构建镜像
你已经将启动命令改为0.0.0.0:8000,但报错日志里仍显示Starting development server at http://8.8.0.0:8000/,说明Docker仍在使用之前构建的旧镜像,没有应用你的修改。
解决步骤
1. 确认Dockerfile启动命令正确
确保Dockerfile最后一行配置为:
CMD python manage.py runserver 0.0.0.0:8000
0.0.0.0表示绑定容器内所有可用网络接口,这样Docker的端口映射才能正常生效,外部可通过宿主机8000端口访问应用。
2. 强制重新构建镜像并启动服务
执行以下命令,让Docker重新构建镜像并启动服务:
docker-compose up --build
--build参数会强制Docker重新读取Dockerfile的修改,构建新镜像后再启动容器。
3. 检查Django的ALLOWED_HOSTS配置
即使容器启动成功,若Django项目settings.py中的ALLOWED_HOSTS未配置正确,仍会出现400错误。开发环境可暂时设置为允许所有主机:
ALLOWED_HOSTS = ['*']
生产环境需替换为具体的域名或IP地址。
4. 额外注意:数据库就绪问题
depends_on仅保证db服务启动,但不确保MySQL已完全就绪接受连接。若Django启动时数据库未准备好,会触发连接失败错误。可通过添加等待脚本或配置docker-compose的healthcheck,确保数据库就绪后再启动Django服务。
验证
重新启动后,若日志显示:
Starting development server at http://0.0.0.0:8000/
即可通过http://127.0.0.1:8000/正常访问你的Django应用。
内容的提问来源于stack exchange,提问作者Thembo JONATHAN

