新的 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
我正在将我的 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