Debian虚拟机中Django+Docker+PostgreSQL无法执行迁移问题
解决Django容器无法解析PostgreSQL容器主机名的迁移问题
核心原因及解决办法
1. 必须在Django容器内部执行迁移命令
你大概率是在宿主机直接运行python manage.py migrate,宿主机的DNS系统无法解析Docker Compose创建的容器服务名pgdb,这是最常见的问题。
正确操作:
- 查看Django容器的名称或ID:
docker ps - 进入容器内部执行迁移:
或者直接用docker-compose命令执行:docker exec -it <Django容器名称/ID> python manage.py migratedocker-compose exec server python manage.py migrate
2. 验证容器间网络连通性
如果上述操作仍报错,手动排查网络连通性:
- 进入Django容器:
docker exec -it <Django容器名称/ID> bash - 在容器内尝试ping
pgdb:
如果ping不通,执行以下操作:ping pgdb- 重启整个服务栈,确保网络配置完全生效:
docker-compose down -v docker-compose up -d - 确认PostgreSQL容器完全就绪:
depends_on仅保证容器启动顺序,不保证PostgreSQL服务加载完成。可以给Django服务添加启动延迟,或者使用wait-for-it工具,等待PostgreSQL端口就绪后再启动Django。
- 重启整个服务栈,确保网络配置完全生效:
3. 核对Django数据库配置
你的settings.py配置本身无明显错误,但需再次确认:
HOST字段严格对应docker-compose中PostgreSQL的服务名pgdb(Docker服务名大小写敏感)- 数据库名称、用户名、密码与PostgreSQL容器的环境变量完全匹配
内容的提问来源于stack exchange,提问作者Дмитрий Кулиш
相关产品推荐
相关产品推荐

