如何通过环境变量的值转换成文件中的泊坞窗容器我试图运行

问题描述:

比方说,我有我的搬运工容器中的配置文件位于:如何通过环境变量的值转换成文件中的泊坞窗容器我试图运行

/opt/jboss/bin/config.xml

配置文件看起来是这样的:

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

我想传递的,当我去运行使用“--env文件”的说法泊坞窗容器的实际密码。

这是在ENV文件,我传递的内容:

PASSWORD=MyPassword 

我理解的变量= value语法。 “MyPassword”是密码变量的值。

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

+1

您的问题不清楚,请尽量做得更好。 –

+0

由于你的xml文件没有预期的语法,docker会忽略它 – user2915097

+0

预期的语法是什么?如果我只是在XML文件中输入“PASSWORD”而不是“$ PASSWORD”,那会起作用吗? – daniel9x

在ENV文件中的语法应该是

variable=value

看到该文档在https://docs.docker.com/engine/reference/commandline/run/

提取

cat ./env.list TEST_FOO=BAR

简短的回答是 - 它不一定会。除非你有一些机制来重写主机环境中的配置文件。

这在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,所以可能会有更好的选择)

+0

好吧,容器实际上启动了一个应用服务器,它使用config.xml文件中的凭证来连接 – daniel9x

+1

当然,但它可能不会扩展变量'$ PASSWORD',除非明确告知这样做。在尝试使用配置之前,您需要一些扩展它的方法,否则它会直接看到“$ PASSWORD”。 –

+0

您将需要一些shell脚本,在''和' Database-Password>之间提取文件中的内容'将其写入以'Password ='开头的行的文件中 – user2915097