docker - 如何将环境变量值传递到我尝试运行的Docker容器中的文件中

标签 docker environment-variables credentials

假设我的Docker容器中有一个配置文件,位于此处:

/opt/jboss/bin/config.xml

Config文件如下所示:

<Database-Password>$PASSWORD</Database-Password>

我想在使用“--env-file”参数运行Docker容器时传递实际密码。

这是我传入的环境文件中的内容:
PASSWORD=MyPassword

我了解VARIABLE = VALUE语法。 “MyPassword”是Password变量的值。

docker 将如何知道如何使用此变量查找特定文件(/opt/jboss/bin/config.xml)并将其换出?我是否在配置文件中正确声明了变量?由于某种原因,我在查找此信息时遇到了麻烦。

最佳答案

简短的答案是-不一定。除非您有某种机制可以从主机环境中重写配置文件。

这在Shell脚本中非常简单-您可以像完成操作一样引用它。

但是从这个意义上说,XML文件不是“运行”的,因此它可能不会正常工作。

例如,如果您想“编辑” XML,可以使用perl来完成它,但是您必须安装更多的东西才能使其工作:

perl -MXML::Twig -e'XML::Twig -> new ( twig_handlers => { Database-Password => sub { $_ -> set_text ( $ENV{PASSWORD} ) } } ) -> parsefile_inplace("/opt/jboss/bin/config.xml")'

(这将需要同时安装perlXML::Twig,因此可能会有更好的选择)

关于docker - 如何将环境变量值传递到我尝试运行的Docker容器中的文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35226444/

相关文章:

ubuntu - 如何在 docker 中运行功能齐全的 Linux 发行版?

jenkins - 如何在 Jenkins 声明式管道的所有阶段获取 Jenkins 凭据变量

django - 如何使用 docker-compose 删除 `django_admin_log`?

shell - 如何判断终端是否是windows终端

Linux环境变量已设置但未使用

Jenkins 全局环境变量与节点系统变量?

azure - 使用用户名和密码写入 Azure Blob

c# - 网络服务 401 : Unauthorized Error

elasticsearch - 将 Elasticsearch 和 Kibana 配置文件传递给 docker 容器

php - laravel 应用中调用 index.php 报错 500(Windows 环境)