如何将 docker 变量传递给 jboss-cli.sh?

How to pass a docker variable to jboss-cli.sh?

我的 jboss cli 文件中有一个变量,我们称它为 ${FOO}。

我可以看到变量设置在我的 Docker 文件中,如果我:

RUN echo ${FOO}

我看到打印的值。

我有一个 foo.cli 文件,其中包含类似于以下内容的行:

/system-property=foo:add(value="${FOO}")

当我 运行 jboss-cli.sh foo.cli

我得到:

Cannot resolve expression ${FOO}.

有没有办法将变量从 Docker 传递到 jboss-cli.sh 的文件参数?

我也尝试在 system-属性 行中删除 ${FOO} 周围的引号,但没有成功。

您可能需要将 jboss-cli.xml 设置为 <resolve-parameter-values>true<\/resolve-parameter-values>

$ sed -i "s/<resolve-parameter-values>false<\/resolve-parameter-values>/\
<resolve-parameter-values>true<\/resolve-parameter-values>/" \
$JBOSS_HOME/bin/jboss-cli.xml

来源:https://mirocupak.com/using-environment-variables-in-jboss-cli/

这是因为 CLI 不将值与名称相同对待。简而言之,操作名称、参数名称、header 名称和值、命令名称以及命令参数名称都是自动解析的。参数和参数值不是。要解决此问题,我们需要在 jboss-cli.xml.

中将 resolve-parameter-values 设置为 true

例如:-

sed -i "s/<resolve-parameter-values>false<\/resolve-parameter-values>/\
<resolve-parameter-values>true<\/resolve-parameter-values>/" \
$JBOSS_HOME/bin/jboss-cli.xml

请注意,上面的命令是 one-off 解决方案。从维护的角度来看,对 XML 使用 sed 通常不是一个好主意。如果您要自动执行此操作,请考虑改用 XPath

注意:- 此功能需要 WildFly 8.0.0.CR1 或更新版本。

这些是解决问题的好提示,但 sed 命令在 Mac 上无法正常工作。 “-i”有很多乐趣。更多信息在这里:

sed command with -i option failing on Mac, but works on Linux

在 Mac 这对我有用: sed -i "" "s/false/true/" $JBOSS_HOME/bin/jboss-cli.xml

不幸的是,这种使用 sed 的方式不适用于 RHEL。