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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 10:42:18