如何将variables作为属性传递给Docker中的Wildfly的xmlconfiguration文件

我试图将docker-compose.yml文件中的值dynamic传递给Wildflyconfiguration。 我想有灵活的邮件configuration – 只是为了快速更改地址,或用户名或端口..

在这种情况下,我试图通过从docker-compose.yml转发环境variables,通过dockerfile作为参数来实现这个目的“-Dargumentname = $ environmentvariable。目前wildfly在启动时插入错误:

WFLYCTL0013:操作(“添加”)失败 – 地址:([(“subsystem”=>“mail”),(“mail-to-server”会话“=>”默认“))]) – 失败描述:”WFLYCTL0097:ssl的错误types,预期[布尔],但是是STRING“

同样的情况,如果我尝试在出站套接字绑定块中传递PORT作为值。

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

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

独立-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文件中,您已经定义了环境variables,因此您需要在wildflyconfiguration中将其引用为环境variables。 最简单的方法是将你的env var加上env. 字首。 所以在你的例子中,你有envvariablesHOSTSSLUSERNAME …你可以在standalone.xml中引用这样的:

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

没有env. 前缀,jboss / wildfly将尝试将expression式parsing为jvm属性,您必须将其指定为jvm -D标志。
您还可以在expression式中使用默认值回退,例如:

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

这样,ssl将被设置为环境variablesSSL的值,如果这个variables不存在,服务器将回退到true
快乐黑客