如何将环境变量值传递到docker容器I';我想跑

如何将环境变量值传递到docker容器I';我想跑,docker,environment-variables,credentials,Docker,Environment Variables,Credentials,假设我的docker容器中有一个配置文件,位于此处: /opt/jboss/bin/config.xml 配置文件如下所示: <Database-Password>$PASSWORD</Database-Password> 我理解VARIABLE=VALUE语法。“MyPassword”是密码变量的值 docker如何知道如何找到带有此变量的特定文件(/opt/jboss/bin/config.xml)并将其交换出去?我是否在配置文件中正确声明了变量?由于某些原因,我很

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

/opt/jboss/bin/config.xml

配置文件如下所示:

<Database-Password>$PASSWORD</Database-Password>
我理解VARIABLE=VALUE语法。“MyPassword”是密码变量的值


docker如何知道如何找到带有此变量的特定文件(/opt/jboss/bin/config.xml)并将其交换出去?我是否在配置文件中正确声明了变量?由于某些原因,我很难找到此信息。

您的env文件中的语法应该是

变量=值

提取

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")'

(这需要同时安装
perl
XML::Twig
,因此可能有更好的选项)

您的问题不清楚,请尝试改进。由于您的XML文件没有预期的语法,docker将忽略它预期的语法是什么?如果我只是在XML文件中放入“PASSWORD”而不是“$PASSWORD”,这会起作用吗?好的,容器实际上启动了一个应用程序服务器,它使用config.XML文件中的凭据来连接,但是除非明确要求这样做,否则它可能不会扩展变量
$PASSWORD
。在尝试使用该配置之前,您需要某种方法来扩展它,否则它将真正看到“$PASSWORD”。您需要一些shell脚本,从
之间提取文件中的内容,并将其写入以
PASSWORD=
左右开头的文件中
perl -MXML::Twig -e'XML::Twig -> new ( twig_handlers => { Database-Password => sub { $_ -> set_text ( $ENV{PASSWORD} ) } } ) -> parsefile_inplace("/opt/jboss/bin/config.xml")'