簡體   English   中英

如何使用Docker在Wildfly中將變量作為屬性傳遞給xml配置文件

[英]How to pass variable as attribute to xml configuration file in Wildfly with Docker

我正在嘗試將值從docker-compose.yml文件動態傳遞到Wildfly配置。 我想靈活地配置郵件-只是為了快速更改地址,用戶名或端口。

在這種情況下,我嘗試通過轉發docker-compose.yml中的環境變量,通過dockerfile作為參數“ -Dargumentname = $ environmentvariable。”來實現此目的。目前,wildfly中斷以錯誤開頭:

[org.jboss.as.controller.management-operation](ServerService線程池-45)WFLYCTL0013:操作(“ add”)失敗-地址:([(“ subsystem” =>“ mail”),(“ mail- session“ =>” default“)])-失敗描述:” WFLYCTL0097:ssl類型錯誤。應為[BOOLEAN],但為STRING“

同樣的情況,如果我嘗試將PORT作為值傳遞到出站套接字綁定塊中。

我不知道如何從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
...

Dockerfile:

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" ]

standalone-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>
...

快好了。 在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的環境變量的值,如果這樣的var不存在,則服務器將回退為true
快樂黑客

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM