You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用Docker构建Django+PostgreSQL应用时数据库不存在的问题求助

解决Docker部署Django+PostgreSQL时"database does not exist"的问题

看起来你遇到的核心问题有两个:一是Django无法连接到docker_db数据库,二是PostgreSQL容器反复报错找不到docker数据库。结合你的配置和日志,我来一步步帮你解决:

1. 彻底清理残留的PostgreSQL数据卷

从日志里的PostgreSQL Database directory appears to contain a database; Skipping initialization可以看出,你的pgdata卷里还残留着旧的数据库数据,导致PostgreSQL跳过了初始化步骤,没有创建你指定的docker_db数据库——哪怕你删除过容器,卷可能也没彻底清理干净。

执行这条命令彻底删除所有关联容器和卷:

docker-compose down -v

这个命令会删除所有服务容器、网络,以及定义的卷(包括pgdata),确保下次启动时PostgreSQL会重新初始化数据库。

2. 修复PostgreSQL的健康检查命令

日志里的FATAL: database "docker" does not exist是因为你的healthcheck命令pg_isready -U docker默认会尝试连接和用户名同名的数据库(也就是docker),但你配置的目标数据库是docker_db

修改compose.yml里的healthcheck部分:

healthcheck:
  test: ["CMD-SHELL", "pg_isready -U docker -d docker_db"]
  interval: 5s
  timeout: 5s
  retries: 5

加上-d docker_db指定要检查的数据库,这样就不会再报找不到docker数据库的错误了。

3. 确认Django的数据库配置正确加载

确保你的Django项目的settings.py里正确读取了.env文件中的数据库配置,示例配置如下:

import os

DATABASES = {
    'default': {
        'ENGINE': os.environ.get('SQL_ENGINE', 'django.db.backends.sqlite3'),
        'NAME': os.environ.get('SQL_DATABASE', os.path.join(BASE_DIR, 'db.sqlite3')),
        'USER': os.environ.get('SQL_USER', 'user'),
        'PASSWORD': os.environ.get('SQL_PASSWORD', 'password'),
        'HOST': os.environ.get('SQL_HOST', 'localhost'),
        'PORT': os.environ.get('SQL_PORT', '5432'),
    }
}

如果你的项目没安装python-dotenv,可以在requirements.txt里加上它(本地开发时需要),不过Docker里通过env_file加载已经足够。

4. 调整Django服务的启动命令

你的back服务命令里同时写了runservergunicorn,这会导致只有第一个命令(runserver)执行,第二个永远不会运行。而且建议在启动服务前先执行数据库迁移,避免Django连接数据库时出现迁移相关的问题。

修改compose.yml里的back服务command:

command: sh -c "python manage.py migrate && python manage.py runserver 0.0.0.0:8000"

如果是生产环境,换成gunicorn:

command: sh -c "python manage.py migrate && gunicorn blog.wsgi:application -w 2 -b :8000"

最后验证

执行完以上步骤后,重新启动服务:

docker-compose up --build

这次PostgreSQL会重新初始化,创建docker_db数据库,Django也能正常连接了。

内容的提问来源于stack exchange,提问作者Misha

火山引擎 最新活动