在Django项目中的docer-compose.yml文件中:环境变量未从.env文件中创建

33 浏览
0 Comments

在Django项目中的docer-compose.yml文件中:环境变量未从.env文件中创建

我的docker-compose.yml文件:

version: '3.8'

services:

web:

build: ./app

command: python3 manage.py runserver 0.0.0.0:8000

volumes:

- ./app/:/usr/src/app/

ports:

- 8000:8000

env_file:

- .dev.env

我的Dockerfile./app中:

FROM kuralabs/python3-dev
WORKDIR /usr/src/app
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
# RUN pip install --upgrade pip 
COPY ./requirements.txt .
RUN pip3 install -r requirements.txt
COPY . .

我的.dev.env文件:

ALLOWED_HOSTS='localhost 127.0.0.1'
DEBUG=1
SECRET_KEY='django-insecure-...'

My catalog in attached

我使用以下命令运行项目:

$docker-compose build
$docker-compose up -d

我在settings.py中获取变量:

load_dotenv()
print(f'Environment: {os.environ}')

我的'.dev.env'文件中的变量不在环境变量列表中。

请帮我理解为什么.dev.env中的变量没有进入环境。

0
0 Comments

问题出现的原因是在Docker Compose中使用环境变量时,无法从.env文件中创建环境变量。解决方法有两种:

1. 使用.env文件中的环境变量直接赋值给服务:

version: '3.9'
services:
  something:
    image: someimage
    container_name: comecontainer
    environment:
      - MARIADB_ROOT_USER
      - MARIADB_ROOT_PASSWORD
      - MARIADB_DATABASE

在这种情况下,环境变量将直接从与docker-compose.yaml文件相同的目录下的.env文件中读取。

2. 使用env_file指定.env文件的路径:

version: '3.9'

services:

something:

image: someimage

container_name: comecontainer

env_file:

- .dev.env

在这种情况下,可以使用env_file指定.env文件的路径,例如使用.dev.env文件。

另外,还可以在Django项目的manage.py文件中使用load_dotenv函数来指定.env文件的路径:

from dotenv import load_dotenv
from pathlib import Path, PurePosixPath
dotenv_path = PurePosixPath(Path(__file__).resolve().parent.parent, '.dev.env').as_posix()
load_dotenv(dotenv_path=dotenv_path)

如果以上方法仍然无法解决问题,可以尝试以下两种方法:

1. 将Docker Compose的版本升级到3.9,并确保在存放.env文件的文件夹位置执行docker-compose up --build命令。

2. 参考stackoverflow上的解决方法,通过在Dockerfile中添加RUN echo ENV命令来检查环境变量是否被正确设置。

0