Docker-Compose环境下Django createsuperuser命令执行失败问题
解决Docker中Django执行
createsuperuser时的KeyError: 'POSTGRES_DB'问题 核心原因
这个错误是因为Django无法读取到POSTGRES_DB环境变量,导致数据库配置失败。直接在主机执行python manage.py createsuperuser时,主机环境没有Docker容器内的数据库相关环境变量,或者容器内的环境变量配置不完整。
解决步骤
1. 确认Django数据库配置使用环境变量
检查项目根目录下的settings.py,确保数据库配置通过环境变量获取,示例如下:
import os DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': os.getenv('POSTGRES_DB'), 'USER': os.getenv('POSTGRES_USER'), 'PASSWORD': os.getenv('POSTGRES_PASSWORD'), 'HOST': os.getenv('POSTGRES_HOST', 'db'), # 'db'对应docker-compose中数据库服务的名称 'PORT': os.getenv('POSTGRES_PORT', '5432'), } }
注意:必须导入os模块,否则无法使用os.getenv方法。
2. 检查docker-compose.yml的环境变量配置
确保app服务(你的Django应用服务名称)和db服务的数据库环境变量完全一致,示例配置:
version: '3.8' services: app: build: . environment: - POSTGRES_DB=my_django_db - POSTGRES_USER=db_user - POSTGRES_PASSWORD=db_password - POSTGRES_HOST=db depends_on: - db # 其他配置(端口映射、卷挂载等) db: image: postgres:alpine environment: - POSTGRES_DB=my_django_db - POSTGRES_USER=db_user - POSTGRES_PASSWORD=db_password volumes: - postgres_data:/var/lib/postgresql/data/ volumes: postgres_data:
3. 在Django容器内执行创建超级用户命令
不要直接在主机执行命令,需进入运行中的Django应用容器操作:
- 执行以下命令(将
app替换为你docker-compose.yml中应用服务的实际名称):
docker-compose exec app python manage.py createsuperuser
- 按照提示输入用户名、邮箱、密码即可完成超级用户创建。
如果容器未运行,或想临时启动容器执行命令,可使用:
docker-compose run --rm app python manage.py createsuperuser
4. 验证配置
完成上述步骤后,访问127.0.0.1:8000/admin,使用刚创建的超级用户账号即可登录后台管理面板。
内容的提问来源于stack exchange,提问作者MHSorensen
相关产品推荐
相关产品推荐

