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

Windows环境下Docker部署Django:PostgreSQL本地数据无法在容器显示

问题:Docker部署Django+PostgreSQL无法读取已有数据库数据

在Windows系统中使用Docker部署Django应用,搭配PostgreSQL 14与PgAdmin4,并为Docker创建了专用服务器。目前遇到的问题是:PostgreSQL容器日志显示已检测到数据库目录存在数据并跳过初始化,但Django应用中无法看到本地的超级用户及数据。

以下是相关配置与日志信息:

PostgreSQL容器日志

2022-07-16 19:39:23.655 UTC [1] LOG:  starting PostgreSQL 14.4 (Debian 14.4-1.pgdg110+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 10.2.1-6) 10.2.1 20210110, 64-bit
2022-07-16 19:39:23.673 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432
2022-07-16 19:39:23.673 UTC [1] LOG:  listening on IPv6 address "::", port 5432
2022-07-16 19:39:23.716 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
2022-07-16 19:39:23.854 UTC [26] LOG:  database system was shut down at 2022-07-16 16:50:47 UTC
2022-07-16 19:39:23.952 UTC [1] LOG:  database system is ready to accept connections

PostgreSQL Database directory appears to contain a database; Skipping initialization

Django应用容器日志(无迁移可执行)

0 static files copied to '/app/static', 9704 unmodified.
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, controle, sessions
Running migrations:
  No migrations to apply.
Performing system checks...

System check identified no issues (0 silenced).
July 16, 2022 - 16:40:38
Django version 4.0.6, using settings 'setup.settings'
Starting development server at http://0.0.0.0:8000/
Quit the server with CONTROL-C.

更新后的docker-compose配置

services:
  db:
    image: postgres
    volumes:
      - ./data/db:/var/lib/postgresql/data
    networks:
      - django_net
    environment:
      - POSTGRES_DB=${POSTGRES_DB}
      - POSTGRES_USER = ${POSTGRES_USER}
      - POSTGRES_PASSWORD = ${POSTGRES_PASSWORD}
    ports:
      - "5432:5432"

  web:
    build: .
    command: >
            sh -c "python manage.py collectstatic --noinput &&
                   python manage.py migrate &&
                   python manage.py runserver 0.0.0.0:8000"
    volumes:
      - .:/app
    ports:
      - "8000:8000"
    depends_on:
      - db
    links:
      - db
    environment:
      - POSTGRES_NAME=${POSTGRES_NAME:-djangodb}
      - POSTGRES_USER=${POSTGRES_USER:-postgre}
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-postgre}
    networks:
      - django_net


networks:
  django_net:
    driver: bridge

更新后的.env文件

SECRET_KEY='django-insecure-1l2oh_bda$@s0w%d!@qyq8-09sn*8)6u-^wb(hx03==(vjk16h'
POSTGRES_NAME=postgres
POSTGRES_USER=postgres
POSTGRES_PASSWORD=mypass
POSTGRES_DB=mydb
DJANGO_ALLOWED_HOSTS=localhost 127.0.0.1 [::1]

settings.py中的数据库配置

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': os.environ.get('POSTGRES_NAME'),
        'USER': os.environ.get('POSTGRES_USER'),
        'PASSWORD': os.environ.get('POSTGRES_PASSWORD'),
        'HOST': 'db',
        'PORT': 5432,
    }
}

已附上PgAdmin中的数据库数据截图和应用界面截图,请问遗漏了哪些配置?


排查与解决方向
  1. 环境变量格式错误
    docker-compose中db服务的环境变量存在空格:POSTGRES_USER = ${POSTGRES_USER}和POSTGRES_PASSWORD = ${POSTGRES_PASSWORD},等号两侧的空格会导致变量无法正确读取,PostgreSQL会使用默认值(用户postgres,无密码)。需要去掉空格,改为:

    - POSTGRES_USER=${POSTGRES_USER}
    - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
    
  2. 数据库名称不匹配
    .env文件中POSTGRES_NAME=postgres(Django连接的库名),而POSTGRES_DB=mydb(PostgreSQL初始化时创建的库名),两者不一致。Django连接的是postgres库,但你本地的数据可能在mydb库中。需要统一两者:

    • 要么修改.env中的POSTGRES_NAME=mydb,让Django连接到初始化的mydb库;
    • 要么修改.env中的POSTGRES_DB=postgres,让PostgreSQL初始化时创建postgres库。
  3. 数据库目录已有旧数据干扰
    PostgreSQL容器的./data/db卷中已有旧数据库数据,可能不是你期望的包含本地超级用户的数据库。可以尝试:

    • 停止并删除容器:docker-compose down -v(-v会删除卷数据);
    • 清理本地./data/db目录;
    • 重新启动容器:docker-compose up --build,让PostgreSQL重新初始化数据库。
  4. 确认Django是否连接到正确的数据库
    进入Django容器执行命令,验证数据库连接:

    docker-compose exec web python manage.py dbshell
    

    进入数据库后,执行\l查看所有库,确认当前连接的库是否包含你的数据;执行\dt查看表,确认是否有auth_user等用户表及数据。

  5. 超级用户未创建或未在当前数据库
    如果数据库中没有超级用户,需要在Django容器中创建:

    docker-compose exec web python manage.py createsuperuser
    

    注意创建时要确保连接的是正确的数据库。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 22:24:33