python - Docker:如何在构建过程中从文件设置环境变量?

标签 python docker build dockerfile environment

我想在构建过程中设置 env.list 文件中指定的环境变量列表,即在 Dockerfile 中有相应的命令。像这样:

FROM python:3.9.4-slim-buster

COPY env.list env.list

# Here I need a corresponding command:
ENV env.list 

该文件如下所示:

FOO=foo
BAR=bar

我的失败尝试/排除选项的书:


在 Linux 上,通常可以通过运行以下命令从文件 env.list 设置环境变量:

source env.list
export $(cut -d= -f1 env.list)

但是,在 Dockerfile 中以 RUN 方式执行这些命令不起作用,因为使用 RUN export FOO=foo 定义的环境变量不会在镜像的不同阶段中保留。


我不想使用 ENV FOO=foo 在 Dockerfile 中显式设置这些变量,因为它们包含登录凭据。如果变量定义在一处,那么自动化/维护项目也会更容易。


我也不想在 docker run --env-file env.list 期间设置这些变量,因为我需要它们用于不“运行”的开发容器。

最佳答案

正如所指出的,ENV 指令不允许解析像 env.list 这样的文件。但即使这样做,生成的环境变量仍然会保存在最终图像中,包括密码。

据我所知,正确的方法是在运行时使用“docker run”设置密码,当该镜像运行时,或者当子镜像通过“docker run”运行时。

如果在构建镜像时需要凭据,我将通过 ARG 指令传递它们,以便它们可以作为 Dockerfile 中的 shell 变量进行引用,但不会保存在最终镜像中:

ARG VAR
FROM image

RUN echo ${VAR}
etc...

可以运行为:

docker build --build-arg VAR=value ...

关于python - Docker:如何在构建过程中从文件设置环境变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67418054/

相关文章:

python - 点积的递归应用

python - Django Imagekit - 如何获取不在模板中的url?

docker - 是否可以只安装 docker cli 而不是守护进程

shell - 为什么我的gradle构建的shellscript执行在jenkins上的行为与在cli上的行为不同?

opencv - 无法在Fedora 19上使用CUDA 5.5编译OpenCV 2.4.6

python - 从 HTML 表中提取数据

python - 无法使用 pyautogui 选择文本

docker - 如何在Jenkins管道中设置postgres数据库?

docker - 无法连接到 tcp 处的 Docker 守护进程 ://localhost:2375/. docker 守护进程是否正在运行。在 GitLab 上

vue.js - 如何将 vue-cli 与同一项目中现有的不相关的 webpack 设置集成?