tco*_*o25 8 sed environment-variables 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
Run Code Online (Sandbox Code Playgroud)
我在文件CONFIG_FILE中显式地显示字符串CONFIG_VALUE,并且Dockerfile中的默认值被正确替换.但是,当我运行带有添加的容器时,-e CONFIG_VALUE=100不执行替换,将保留Dockerfile中设置的默认值.
当我做
docker exec -i -t container_name bash
Run Code Online (Sandbox Code Playgroud)
和echo $CONFIG_VALUE容器内的环境变量确实包含所需的值100.
Adr*_*uat 16
当您执行此操作时,将逐行评估Dockerfile中的指令,docker build并且不会在运行时对其进行重新评估.
但是,您仍然可以使用入口点脚本执行此操作,该脚本将在设置任何环境变量后在运行时进行评估.
例如,您可以定义以下entrypoint.sh脚本:
#!/bin/bash
sed -i 's/CONFIG_VALUE/'"$CONFIG_VALUE"'/g' CONFIG_FILE
exec "$@"
Run Code Online (Sandbox Code Playgroud)
在exec "$@"将执行设定任何CMD或命令.
将它添加到Dockerfile,例如:
COPY entrypoint.sh /
RUN chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
Run Code Online (Sandbox Code Playgroud)
请注意,如果您有现有入口点,则需要将其与此入口点合并 - 您只能有一个入口点.
现在你应该发现环境变量是受到尊重的,即:
docker run -e CONFIG_VALUE=100 container_name cat CONFIG_FILE
Run Code Online (Sandbox Code Playgroud)
应该按预期工作.
这在Dockerfile中是不可能的:这些指令是静态的,用于制作图像.
如果在启动容器时需要运行时指令,则应该在CMD指令调用的脚本中对它们进行编码.
换句话说,sed将发生在被CMD调用的脚本中.在执行此操作时docker run,该脚本可以在上述之前访问环境变量集docker run.
| 归档时间: |
|
| 查看次数: |
9323 次 |
| 最近记录: |