如何在dockerfile中部署动态变量,以便用户从中选择环境变量?

如何在dockerfile中部署动态变量,以便用户从中选择环境变量?,docker,environment-variables,Docker,Environment Variables,我试图定义一些预设的ENV变量,供用户在“docker运行”期间选择,但它们不会像预期的那样在容器上持久化 我尝试在Dockerfile本身中定义ENV,这适用于默认设置,但您不能动态地将其更改为其他预设。 但是,您可以将其更改为其他纯文本输出 Dockerfile: ENV SH_HELLO="Hello World!" SH_BYE="Goodbye, cruel world!" ENV ENV_PHRASE=${SH_HELLO} COPY run.sh . RUN chmod u+x r

我试图定义一些预设的ENV变量,供用户在“docker运行”期间选择,但它们不会像预期的那样在容器上持久化

我尝试在Dockerfile本身中定义ENV,这适用于默认设置,但您不能动态地将其更改为其他预设。 但是,您可以将其更改为其他纯文本输出

Dockerfile:

ENV SH_HELLO="Hello World!" SH_BYE="Goodbye, cruel world!"
ENV ENV_PHRASE=${SH_HELLO}
COPY run.sh .
RUN chmod u+x run.sh
CMD bash ./run.sh
run.sh:

#!/bin/bash
echo "${ENV_PHRASE}"
这会像预期的那样打印“你好,世界!”

如果我在容器中运行一个终端并运行“env”,我会得到所有变量

sh-4.2# env
SH_BYE=Goodbye, cruel world!
SH_HELLO=Hello World!
ENV_PHRASE=Hello World!
但是,如果我运行以下任一项:

docker run -it -e ENV_PHRASE=${SH_BYE}
docker run -it -e ENV_PHRASE=${SH_HELLO}
它返回空白

sh-4.2#

sh-4.2#
容器中的“env”表示:

sh-4.2# env
SH_BYE=Goodbye, cruel world!
SH_HELLO=Hello World!
ENV_PHRASE=
期望的结果是,用户可以查看我提供的一些变量列表,选择一个,并让docker部署使用该变量,而无需手动定义自己的变量或使用自定义变量

i、 e

同时在其他地方定义:

TEMPLATE1=config1
TEMPLATE2=config2
TEMPLATE3=config3

首先,当您执行此操作时:

docker run -it -e ENV_PHRASE=${SH_BYE}
docker在其运行的上下文(即主机)中查找环境变量,而不是在映像或容器中

老实说,我看不到您试图实现的目标的用例,但我通常会提供一个.env文件,用户可以对其进行个性化设置:

docker run --env-file .env ....
这已经有了变量名,用户可以提供自己的值。这就是你想要的变量列表

有更复杂的解决方案可用于提供诸如concur或Vault之类的键值对,您也可以在将来查看这些键值对

docker run --env-file .env ....