将变量从容器开始传递到文件

2023-11-22

我在 Dockerfile 中有以下几行,我想在应用程序最后启动之前将配置文件中的值设置为默认值,并提供可选的使用-e启动容器时的选项。

我正在尝试使用 Docker 来做到这一点ENV突击队

 ENV CONFIG_VALUE default_value
 RUN sed -i 's/CONFIG_VALUE/'"$CONFIG_VALUE"'/g' CONFIG_FILE
 CMD command_to_start_app

我在文件 CONFIG_FILE 中明确显示了字符串 CONFIG_VALUE,并且 Dockerfile 中的默认值被正确替换。但是,当我运行带有添加的容器时-e CONFIG_VALUE=100不进行替换,保留 Dockerfile 中设置的默认值。

当我做

docker exec -i -t container_name bash

and echo $CONFIG_VALUE在容器内部,环境变量确实包含所需的值 100。


当您这样做时,会逐行评估 Dockerfile 中的指令docker build并且不会在运行时重新评估。

但是,您仍然可以通过使用入口点脚本来执行此操作,该脚本将在设置任何环境变量后在运行时进行评估。

例如,您可以定义以下内容entrypoint.sh script:

#!/bin/bash

sed -i 's/CONFIG_VALUE/'"$CONFIG_VALUE"'/g' CONFIG_FILE
exec "$@"

The exec "$@"将执行任何设置的 CMD 或命令。

将其添加到 Dockerfile 例如:

COPY entrypoint.sh /
RUN chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]

请注意,如果您有一个现有入口点,则需要将其与此合并 - 您只能有一个入口点。

现在您应该发现环境变量受到尊重,即:

docker run -e CONFIG_VALUE=100 container_name cat CONFIG_FILE

应该按预期工作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将变量从容器开始传递到文件 的相关文章

随机推荐