当前位置: 首页 > 面试题库 >

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

黎承颜
2023-03-14
问题内容

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


问题答案:

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

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



 类似资料:
  • 好吧,所以这是已经问过的问题,但答案似乎没有多大帮助。我能够使用jython和该问题中发布的答案运行python脚本,但我无法传递变量...当我运行程序时,错误说没有像arg1 arg2和arg3这样的变量...我做错了什么? 这是python脚本 现在错误说arg1 arg2和arg3未声明

  • 问题内容: 我有几个docker- compose.yml文件,我希望将它们与同一个Dockerfile一起使用,但略有不同。因此,我想将参数传递给该Dockerfile,以便根据变量设置为什么值来做一些稍有不同的操作。 到目前为止我尝试过的 docker-compose-A.yml文件 docker-compose-B.yml文件 我有一个要在其中使用SOMETHING的dockerfile。

  • 我想在kubernetes环境中设置我的Django应用程序,在创建应用程序容器时,传递环境变量,以便这些环境变量用于启动容器。例如,在启动应用程序容器时,我想发出管理命令,例如 等等。如何在容器中以通用方式传递这些变量值,例如上面的lname和fname,以便每次都可以根据用户凭据传递新值,并且每次都不需要硬编码?

  • 我正在使用这个插件在一个离子反应/电容项目中实现Google Play Games服务。 如您所见,为空。 我对java完全不了解(因此我为什么使用电容),但这是我能找到的唯一一段看起来与之相关的代码,在中,在GitHub链接中。 你能帮我解决这个问题吗?它似乎是唯一一个Google Play Games电容插件远程工作... 编辑1:我应该注意,方法工作得很好。 Edit2:尝试调用也不工作,日

  • 问题内容: 我在未传递到javascript文件的玉模板文件(index.jade)中声明的变量(config)遇到问题,这使我的javascript崩溃了。这是文件(views / index.jade): 这是我的app.js(服务器端)的一部分: 这是我的javascript文件崩溃的一部分(public / javascripts / app.js): 我正在本地主机(我自己的机器)上的开

  • 问题内容: 我是Docker的新手,目前尚不清楚如何从容器访问外部数据库。硬编码连接字符串的最佳方法是吗? 问题答案: 您可以使用该标志将环境变量传递到您的容器。 启动脚本的示例: 或者,如果您不希望在命令行中使用,等显示该值,则可以直接从当前环境中获取该值,如果您不带: 如果您有许多环境变量,尤其是要保密的话,可以使用env文件: --env-file标志将文件名作为参数,并期望每行采用VAR