Docker Compose部署Django+PostgreSQL后重新初始化无法连接数据库
Django无法连接PostgreSQL(Docker Compose重启后)的解决方案
以下是针对问题的具体排查和修复步骤:
强制容器启动依赖顺序
Docker Compose默认并行启动容器,可能Django启动时PostgreSQL尚未完成初始化。在docker-compose.yml中为Web服务添加健康检查依赖,确保PostgreSQL就绪后再启动Django:services: db: image: postgres:latest healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-postgres}"] interval: 5s timeout: 5s retries: 5 web: build: . depends_on: db: condition: service_healthy排查5432端口占用
宿主机本地的PostgreSQL服务或其他进程可能占用了5432端口,导致Docker容器无法绑定。执行以下命令查看占用进程:lsof -i :5432停止占用端口的服务,或修改
docker-compose.yml中PostgreSQL的端口映射(例如5433:5432),同时更新Django配置文件中的数据库端口。重置Docker网络
残留的Docker网络配置可能导致容器间通信异常,执行以下命令清理并重建网络:sudo docker network prune -f sudo docker compose down -v sudo docker compose up -d检查PostgreSQL容器初始化状态
查看PostgreSQL容器的启动日志,确认是否存在初始化错误(如权限、数据目录异常):sudo docker logs <你的postgres容器名称或ID>如果日志显示初始化失败,可手动删除容器相关残留文件后重新启动。
验证Django数据库配置
确保Django的settings.py中数据库HOST配置为Docker Compose的服务名(如db),而非localhost或127.0.0.1——容器内访问其他容器需使用服务名:DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': 'postgres', 'USER': 'postgres', 'PASSWORD': 'postgres', 'HOST': 'db', 'PORT': '5432', } }替代重启电脑的方案
无需重启整个系统,仅重启Docker服务即可尝试恢复:sudo systemctl restart docker sudo docker compose up -d
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

