我尝试在堆栈和其他网站上找到解决方案,但没有结果。我和 django 战斗了好几天了。
我将 django 应用程序进行了 Docker 化,并且运行良好。我正在使用 .env 文件来提供秘密变量。从这里开始问题。我无法在 Visual Studio Code 中使用 travis CI 或调试模式,因为我的环境变量不可见。当我尝试运行 travis 或调试器时,我收到错误“SECRET_KEY 设置不能为空”。问题是,如何正确配置我的 django 应用程序或 docker 实例以在每种情况下使用环境变量?几天前,我尝试编写secret_key而不隐藏它,但是我的调试器无法与数据库连接,所以看起来我的变量根本不可见。但正如我所说,当我在正常模式下运行我的应用程序或作为 docker 实例运行它时,它工作正常,我的 .env 文件对于 django 是可见的。在这里你可以找到我的settings.py
from os.path import join, dirname
import os
from dotenv import load_dotenv
from django.contrib.messages import constants as messages
dotenv_path = join(dirname(__file__), '.env')
load_dotenv(dotenv_path)
BASE_DIR = Path(__file__).resolve().parent.parent
SECRET_KEY = os.getenv('SEC_KEY')
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': os.getenv('DB_NAME'),
'USER': os.getenv('DB_USER'),
'PASSWORD': os.getenv('DB_PASSWORD'),
'HOST': os.getenv('DB_HOST'),
'PORT': 5432
}
}
这是我的 docker-compose 文件:
version: '3.4'
services:
electronicshop:
image: electronicshop
build:
context: .
dockerfile: ./Dockerfile
ports:
- "8000:8000"
volumes:
- .:/electronic_shop
command: >
sh -c "python manage.py migrate &&
python manage.py runserver 0.0.0.0:8000"
# env_file:
# - .env
environment:
- DB_HOST=db
- DB_NAME=${DB_NAME}
- DB_USER=${DB_USER}
- DB_PASS=&{DB_PASSWORD}
- DEBUG=1
depends_on:
- db
restart: always
db:
image: postgres:14.1-alpine
environment:
- POSTGRES_DB=${DB_NAME}
- POSTGRES_USER=${DB_USER}
- POSTGRES_PASSWORD=${DB_PASSWORD}
ports:
- 5454:5454/tcp
补充一下上面的答案: 只需为 SECRET_KEY 变量添加新行即可:
environment:
- DB_HOST=db
- DB_NAME=${DB_NAME}
- DB_USER=${DB_USER}
- DB_PASS=${DB_PASSWORD}
- DEBUG=1
- SECRET_KEY=${SECRET_KEY_VARIABLE_NAME_FROM_ENV_FILE}
问题解决了。我必须将 Secret_key 添加到 docker-compose 环境。