当前位置: 首页 > 知识库问答 >
问题:

如何用Docker将变量作为属性传递到Wildfly中的xml配置文件

杨豪
2023-03-14

我试图将docker-compose.yml文件中的值动态地传递给Wildfly配置。我想有灵活的邮件配置-只是为了快速改变地址,或用户名,或端口…

在本例中,我试图通过将docker-compose.yml中的环境变量转发给docker-compose.yml中的dockerfile作为参数“-dargumentname=$environmentvariable。当前wildfly在start上插入错误:

[org.jboss.as.controller.management-Operation](ServerService线程池--45)WFlyCTL0013:操作(“add”)失败-地址:([(“subsystem”=>“mail”),(“mail-session”=>“default”)])-失败描述:“WFlyCTL0097:SSL类型错误。应为[BOOLEAN]但为字符串”

同样的情况,如果我试图将端口作为值传递到出站套接字绑定块中。

我不知道如何将整数/布尔值从docker-compose文件传递到Wildfly配置。

docker-compose.yml(部分)

...
    services:
        some_service:
            image: image_name:tag
            environment:
             - USERNAME=some_username@...
             - PASSWORD=some_password
             - SSL=true // I also tried with value 1
             - HOST=smtp.gmail.com
             - PORT=465 // also doesn't work
...
FROM some_wildfly_base_image

# install cgroup-bin package
USER root
RUN apt-get update
RUN apt-get install -y cgroup-bin
RUN apt-get install -y bc

USER jboss
ADD standalone-myapp.xml /opt/jboss/wildfly/standalone/configuration/
ADD standalone.conf /opt/jboss/wildfly/bin/
ADD modules/ /opt/jboss/wildfly/modules/

RUN wildfly/bin/add-user.sh usr usr --silent

# Set the default command to run on boot
# This will boot WildFly in the standalone mode and bind to all interface
CMD [ "/opt/jboss/wildfly/bin/standalone.sh", "-c", "standalone-myapp.xml", "-Dmail.username=$USERNAME", "-Dmail.password=$PASSWORD", "-Dmail.ssl=$SSL", "-Drm.host=$HOST", "-Drm.port=$PORT" ]

独立-myapp.xml:

...
    <subsystem xmlns="urn:jboss:domain:mail:2.0">
        <mail-session name="default" jndi-name="java:jboss/mail/Default">
            <smtp-server password="${mail.password}" username="${mail.username}" ssl="${mail.ssl}" outbound-socket-binding-ref="mail-smtp"/>
        </mail-session>
    </subsystem>
...

    <outbound-socket-binding name="mail-smtp">
        <remote-destination host="${rm.host}" port="465"/>
    </outbound-socket-binding>
...

共有1个答案

单于正业
2023-03-14

快到了。在您的docker文件中,您已经定义了环境变量,因此您需要在wildfly配置中将它们作为环境变量引用。最简单的方法是在env var前缀env.前缀。因此,在您的示例中,您有env变量hostSSLusername······您可以在standalone.xml中引用,如下所示:

<smtp-server password="${env.PASSWORD}" username="${env.USERNAME}" ssl="${env.SSL}" outbound-socket-binding-ref="mail-smtp"/> </mail-session>

如果没有env.前缀,JBoss/Wildfly将尝试将表达式解析为jvm属性,您必须将其指定为jvm-d标志。
还可以在表达式中使用默认值回退,例如:

ssl="${env.SSL:true}"

这样,ssl将被设置为名为ssl的环境变量的值,如果这样的变量不存在,服务器将返回到true
快乐黑客攻击

 类似资料:
  • 我试图用Postman写一个非常简单的测试。我有两个URL和第一个URL得到一些XML文件,然后存储在邮递员变量作为一个前脚本部分。之后,第二个URL使用此响应并发送另一个POST请求。 但是在成功地从xml中得到结果后,不知何故邮递员没有通过这个请求,而是给出了400。 谢谢

  • 我有一个函数,它应该创建一个变量,并用变量乘积的值,属性填充变量。为了变得更加灵活,我没有为产品属性创造值 我试过上百种方法,使值坚持变化,但他们没有。变体是在后端创建的,但它没有Atributed??????请帮忙!!我做这个已经4天了。( 归属于产品atributes的唯一值是“空转”(>&gtempty<<)价值。////////////变量数据-&>;数组(key->Value),以便产品

  • 问题内容: 我是webpack的新手,几乎可以解决所有构建部分的问题,但是现在的问题是,我想将环境变量从.env文件传递到webpack config,以便可以通过插件将这些变量传递给我的构建文件。 目前,我能够将环境变量直接从webpack传递到我的构建中。请查看下面我在webpack中使用的代码。 我的构建脚本是 问题答案: 您可以为此目的使用包装 参考:https : //www.npmjs

  • 我在一个线程中使用多个csv文件进行比较。 这里,第一个CSV数据集配置返回文件名 现在我想将上面的文件名传递给第二个 CSV 数据集 配置 在jmeter中可能吗?任何人都可以帮助我解决问题。 谢谢,维杰

  • 概述: 我在我的logback.xml文件中使用哨兵appender,我想通过大量的标签作为参数从application.properties文件到logback配置文件。 向后退。xml文件: application.properties: 注意:application.properties中的spring.profiles.active属性映射到logback配置文件中的springProfi

  • 问题内容: 这是我的问题: 当我用JavaScript编写此代码时 // 好: 但是,当我尝试在属性标签中动态设置该值时,没有任何执行。 // 不好: 有人可以帮我吗? 问题答案: Struts标签,例如JSTL,EL等,是在服务器端执行的。执行完所有这些步骤后,仅HTML的最终页面将呈现给客户端。只有这样,JavaScript才能在页面上运行。 您不能混合使用javascript和Struts标