【问题标题】:replace placeholders properties in spring/tomcat docker image替换 spring/tomcat docker 映像中的占位符属性
【发布时间】:2020-05-21 14:03:07
【问题描述】:

我有一个 Dockerfile,例如:

FROM tomcat:8.5

COPY webapp.war /usr/local/tomcat/webapps/
COPY conf /usr/local/tomcat/conf/

CMD ["catalina.sh", "run"]

conf 包含多种类型的文件(.json、.xml、.properties),其中包含一些占位符,格式如下:${some.place.holder}

我想用占位符构建图像,并为我的用户提供替换它们的可能性。

理想情况下,在运行映像时,它们应该能够提供一个新文件作为参数,例如:

some.place.holder=hello

实现这一目标的正确方法是什么?

【问题讨论】:

  • 添加示例文件
  • 有一些 XML,一些 spring 属性文件,一些 json 文件。基本上什么都有。我不认为一个例子会有用。
  • 这是什么应用程序?需要编译吗?是 JavaScript 还是 PHP 还是什么?
  • java spring 应用程序。大部分是配置文件,实际代码当然已经编译好了。
  • 您是否尝试过以SOME_PLACE_HOLDER 的形式定义环境变量并查看它们是否会被自动替换?

标签: docker docker-compose


【解决方案1】:

如果你想用一个bash文件来设置所有的变量,你可以写set_env_var.sh

#!/bin/sh
export PLACEHOLDER1=value
export PLACEHOLDER2=value

然后运行:

source set_env_var.sh

它将设置所有变量。

或者您可以通过像这样设置多个变量来运行任何命令。例如。我想通过以下方式运行一个包含变量的 docker-compose 命令:

    PLACEHOLDER1=value PLACEHOLDER2=value docker-compose up -d

【讨论】:

  • 这不是 OP 提出的问题。请重新阅读问题
  • 这和你问的一样。您基本上需要在构建图像之前将所有这些变量设置为环境变量。此方法替换运行时所需的所有变量,因为它们将被设置为环境变量。
  • 我不太明白它是如何工作的,即使我在环境中添加了所有这些属性,为什么我已经构建的图像中的文件会受到影响?
  • 如何更改图像中的变量。这些只能在容器中或在构建映像之前更改。在这两种情况下,这都有效。
  • 我对最初的帖子进行了更改,以便更清楚地解释我的问题。您无法更改映像中构建的内容,这听起来很奇怪。
猜你喜欢
  • 1970-01-01
  • 2013-11-15
  • 1970-01-01
  • 2017-12-17
  • 2011-01-13
  • 2014-07-16
  • 2018-07-27
  • 1970-01-01
  • 2018-04-28
相关资源
最近更新 更多