如何配置docker-compose让Django服务正确读取SECRET_KEY环境变量
错误原因
Docker容器运行时默认隔离宿主机的环境变量,因此你Windows本地系统中配置的DJANGO_SECRET_KEY无法直接被容器内的Django服务读取,才会抛出密钥为空的配置错误。
解决方案
方案1:直接传递宿主机环境变量到容器
在你现有的docker-compose.yml的django服务配置块中添加environment字段,直接引用宿主机的DJANGO_SECRET_KEY环境变量即可,修改后的完整配置如下:
version: "3.8" services: django: build: . container_name: django command: python manage.py runserver 0.0.0.0:8000 volumes: - .:/usr/src/app ports: - "8000:8000" depends_on: - db # 新增environment配置,注入环境变量 environment: - DJANGO_SECRET_KEY=${DJANGO_SECRET_KEY} db: image: postgres container_name: pgdb environment: - POSTGRES_DB=postgres - POSTGRES_USER=postgres - POSTGRES_PASSWORD=postgres
该方案无需额外新增文件,直接复用你本地已经配置好的系统环境变量。
方案2:通过.env文件统一管理环境变量
如果项目有多个需要传递的环境变量,更推荐用.env文件管理:
- 在
docker-compose.yml同级目录下新建名为.env的文件,写入内容:
DJANGO_SECRET_KEY=替换为你自己的Django密钥值
- 修改
docker-compose.yml的django服务配置,新增env_file字段导入整个文件的变量:
django: build: . container_name: django command: python manage.py runserver 0.0.0.0:8000 volumes: - .:/usr/src/app ports: - "8000:8000" depends_on: - db # 新增env_file配置,导入.env文件的所有环境变量 env_file: - .env
注意:务必将
.env文件添加到.gitignore规则中,避免密钥提交到代码仓库泄露。
生效操作
修改配置后执行以下命令重启容器即可生效:
docker-compose up -d --force-recreate
内容的提问来源于stack exchange,提问作者Joseph Adam
相关产品推荐
相关产品推荐

