繁体   English   中英

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

[英]Docker: How to set environment variables from file during build?

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

如果您使用 docker-compose 您可以传递 variables.env 文件

docker-compose.yml:

version: "3.7"
services:
 service_name:
   build: folder/.
   ports:
   - '5001:5000'
   env_file:
   - folder/variables.env

文件夹/Dockerfile

FROM python:3.9.4-slim-buster

文件夹/变量.env

FOO=foo
BAR=bar

有关撰写的更多信息: https://docs.docker.com/compose/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM