我在 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(使用前将#替换为@)