gpt4 book ai didi

docker - 如何在运行时将数据源密码传递给 websphere 自由容器

转载 作者:行者123 更新时间:2023-12-01 12:06:02 30 4
gpt4 key购买 nike

我正在尝试在 websphere 自由配置文件容器中运行我的应用程序。我想要 1 个可以在 diff env(dev、st、sit 等)上运行的图像。我可以使用 env 变量在运行时将值传递给容器。如何在 wlp 设置中使用它们?这可能吗?

在 server.xml 中,我使用所有配置属性(如连接字符串、用户名和密码)定义了数据源。我已经使用这个文件构建了图像。现在,我想通过将值作为 env 变量传递而不是在 server.xml 中进行硬编码来测试不同 env 中的相同图像。
我找不到 server.xml 可以直接读取 env var 并替换密码变量的方法。
我尝试的另一种方法是使用 bootstrap.properties,因此 server.xml 可以从该文件中读取值。但在这里,我也必须在镜像构建期间提供 bootstrap.properties,并且我无法在运行时更改这些值。

server.xml 中的行:
<dataSource name="XYZ" jndiName="jdbc/xyz" transactional="false">
<jdbcDriver id="OracleJdbcDriver" libraryRef="xyzLib"/>
<properties.oracle URL="${db.url}" user="${db.username}" password="${db.password}"/>
</dataSource>

db.url、db.username 和 db.password 在 bootstrap.properties 中定义,在构建时打包在镜像中。

最佳答案

来自 this :

The following predefined variables can be referenced:
* directory properties, see Liberty: Directory locations and properties
* JVM system properties
* process environment variables

If the same variable is specified in multiple places, the precedence is as follows:
* variables in bootstrap.properties override the process environment variables
* variables in server.xml, or included XML files, override the variables in bootstrap.properties and process environment variables

Use process environment variables in the configuration. Process environment variables are available if you use the env. configuration variable prefix, for example:

<fileset dir="${env.LIBRARY_DIR}" includes="*.jar"/>

For more information on specifying environment variables, see Customizing the Liberty environment.



那么,一个可能的解决方案是:

server.xml:
<properties.oracle URL="${env.db_url}" user="${env.db_username}" password="${env.db_password}"/>

运行时将环境传递给容器:
docker run -d -e db_url=xxx -e db_username=xx -e db_password=x your_image

然后,不同的值将被传递到不同的容器并最终被 server.xml 引用。与 env.格式。

更新:

从@Lata 的尝试如下:

I tried the scenario with capital and small letters. What I got is it doesn't matter which casing you use in server.xml. But while calling the docker run, you have to pass the variables in CAPS only to work.


  • server.xml - 大写字母
  • docker run - CAPS 字母 - 作品
  • docker run-小写字母-不起作用。
  • server.xml - 小写字母
  • docker run -CAPS letter - 有效。
  • docker run - 小写字母 - 不起作用。

  • 所以,最后的结论应该是: server.xml中无论是大写字母还是LOW大小写字母。 , 但需要将 CAPS env 传递给 docker run .由于 docker 没有这样的限制,所以肯定 websphere强制执行此限制。

    关于docker - 如何在运行时将数据源密码传递给 websphere 自由容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56862766/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com