[英]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.