用于 Python 变量的 Docker ENV

Posted

技术标签:

【中文标题】用于 Python 变量的 Docker ENV【英文标题】:Docker ENV for Python variables 【发布时间】:2018-09-21 02:21:43 【问题描述】:

作为 python 和 docker 的新手,我创建了一个小烧瓶应用程序 (test.py),它有两个硬编码值:

username = "test"
password = "12345"

我能够创建 Docker 映像并从以下 Dockerfile 运行容器:

FROM python:3.6

RUN mkdir /code  
WORKDIR /code  
ADD . /code/  
RUN pip install -r requirements.txt  

EXPOSE 5000  
CMD ["python", "/code/test.py"]`

如何为用户名和密码创建 ENV 变量并在运行容器时传递动态值?

【问题讨论】:

【参考方案1】:

在您的 python 代码中,您可以读取环境变量,例如:

import os
username = os.environ['MY_USER']
password = os.environ['MY_PASS']
print("Running with user: %s" % username)

然后,当您运行容器时,您可以设置这些变量:

docker run -e MY_USER=test -e MY_PASS=12345 ... <image-name> ...

这将在容器中设置 env 变量,稍后将由 python 脚本读取这些变量 (test.py)

更多关于os.environ和docker env的信息

【讨论】:

这里有一篇文章展示了如何在构建时设置环境变量,而不是在运行容器时设置它们:blog.ruanbekker.com/blog/2018/04/07/…【参考方案2】:

在您的 Python 代码中,您可以执行以下操作:

 # USERNAME = os.getenv('NAME_OF_ENV_VARIABLE','default_value_if_no_env_var_is_set')
 USERNAME = os.getenv('USERNAME', 'test')

然后您可以创建一个 docker-compose.yml 文件来运行您的 dockerfile:

version: '2'
services:
  python-container:
    image: python-image:latest
    environment:
      - USERNAME=test
      - PASSWORD=12345

您将运行撰写文件:

$ docker-compose up

您需要记住的是构建您在问题中提到的 dockerfile:

$ docker build -t python-image .

如果有帮助,请告诉我。我希望这能回答你的问题。

【讨论】:

以纯文本形式写入的敏感数据在 Dockerfile / Docker-compose.yml 中可以吗? 这真的取决于上下文。【参考方案3】:

FROM python:3

MAINTAINER <abc@test.com>

ENV username=test
    password=12345

RUN mkdir /dir/name

RUN cd /dir/name && pip3 install -r requirements.txt

WORKDIR /dir/name

ENTRYPOINT ["/usr/local/bin/python", "./test.py"]

【讨论】:

每次修改 docker 时,请确保在运行镜像之前运行 build 命令。

以上是关于用于 Python 变量的 Docker ENV的主要内容,如果未能解决你的问题,请参考以下文章

在docker python中缺少环境变量:3使用docker-compose

在不同的docker容器之间共享python中的变量

Python 脚本在 docker 容器中找不到使用 CRON 运行的 ENV 变量

python Python3脚本,用于查找一个或多个docker镜像的后代

用于非 Web 应用程序的带有 Docker + IDE 的 Python 工作流

python 使用JQ从docker容器解析环境变量,然后将它们转换为参数以传递到docker run命令