我在Dockerfile中有以下几行,我想在应用程序最后启动之前将配置文件中的值设置为默认值,并-e在启动容器时使用选项提供设置(可选)。
-e
我正在尝试使用Docker的ENV突击队做到这一点
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中设置的默认值。
-e CONFIG_VALUE=100
当我做
docker exec -i -t container_name bash
并且echo $CONFIG_VALUE在容器内部,环境变量确实包含期望值100。
echo $CONFIG_VALUE
在Dockerfile中这是不可能的:这些指令是静态的,用于创建映像。
如果启动容器时需要运行时指令,则应在CMD指令调用的脚本中对它们进行编码。 换句话说,这sed将在CMD被调用的脚本中发生。在执行该操作时docker run,该脚本将可以访问刚才说的环境变量集docker run。
CMD
sed
docker run