用于 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
Python 脚本在 docker 容器中找不到使用 CRON 运行的 ENV 变量
python Python3脚本,用于查找一个或多个docker镜像的后代