新的 Dockerfile 无法使用 .env 文件读取 Python 中的环境变量

New Dockerfile can't use .env file to read environment variables in Python

我正在将我的 python 脚本的 dockerfile 从使用 requirements.txt 文件更改为使用 pipenv 和多阶段构建。我将 env 变量存储在 .env 文件中,然后导入 os 并使用 os.environ.get 函数读取它们。我在使用我的新 dockerfile 时遇到环境变量问题。以下是正在发生的事情的示例。

第一个 dockerfile,其中 os.environ.get('my_env_var') 在 python 脚本中工作,returns 一个值

FROM python:3.8-slim as builder

WORKDIR /app

COPY . /app

RUN pip install -r requirements.txt

CMD ["python3", "app.py"]

第二个 dockerfile,其中 os.environ.get('my_env_var') 不起作用,returns None 用于所有内容。我已经进入容器并通过在容器中执行 ls -a 和 i 运行 [=16= 确认 .env 文件仍然存在并且与 app.py 文件位于同一目录中] 以确保值仍然存在。

我从教程 post 中复制了 most 段代码,它似乎适合我的用例。

FROM python:3.8-slim as base

# Setup env
ENV LANG C.UTF-8
ENV LC_ALL C.UTF-8
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONFAULTHANDLER 1


FROM base AS python-deps

# Install pipenv and compilation dependencies
RUN pip install pipenv
RUN apt-get update && apt-get install -y --no-install-recommends gcc

# Install python dependencies in /.venv
COPY Pipfile .
COPY Pipfile.lock .
RUN PIPENV_VENV_IN_PROJECT=1 pipenv install --deploy


FROM base AS runtime

# Copy virtual env from python-deps stage
COPY --from=python-deps /.venv /.venv
ENV PATH="/.venv/bin:$PATH"

# Create and switch to a new user
RUN useradd --create-home appuser
WORKDIR /home/appuser
USER appuser

# Install application into container
COPY . .

# Run the application
CMD ["python3", "app.py"]

我对 Linux/dockerfiles/env 变量不够熟悉,不知道我是否想重置一些东西,这样我就不能再自动使用 .env 文件通过 os.environ.get函数。也许它被搞砸了,因为那里有 ENV 命令?如果有人有任何信息,我将不胜感激!

据我所知,ENV 变量是在 运行 命令中独立设置的,无论图像中是否存在 .env 文件。

当运行宁docker图像时,您应该指定您希望拥有哪个.env文件:docker run --env-file=path/to/env/file image:tag

您还可以设置单独的环境变量:--env ENVVARIABLE1=foobar

同样,如果您 运行 使用 docker-compose,请使用 env_file