如何在dockerfile中部署动态变量,以便用户从中选择环境变量?
我试图定义一些预设的ENV变量,供用户在“docker运行”期间选择,但它们不会像预期的那样在容器上持久化 我尝试在Dockerfile本身中定义ENV,这适用于默认设置,但您不能动态地将其更改为其他预设。 但是,您可以将其更改为其他纯文本输出 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 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 ....