我想在构建过程中设置 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/