一尘不染

从容器开始向文件传递变量

docker

我在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

并且echo $CONFIG_VALUE在容器内部,环境变量确实包含期望值100。


阅读 265

收藏
2020-06-17

共1个答案

一尘不染

在Dockerfile中这是不可能的:这些指令是静态的,用于创建映像。

如果启动容器时需要运行时指令,则应在CMD指令调用的脚本中对它们进行编码。
换句话说,这sed将在CMD被调用的脚本中发生。在执行该操作时docker run,该脚本将可以访问刚才说的环境变量集docker run

2020-06-17