Ber*_*urn 2 configuration docker wildfly dockerfile docker-compose
我正在尝试将值从 docker-compose.yml 文件动态传递到 Wildfly 配置。我希望邮件配置具有灵活性 - 只是为了快速更改地址、用户名或端口。
在这种情况下,我尝试通过从 docker-compose.yml 转发环境变量,通过 dockerfile 作为参数“-Dargumentname=$environmentvariable”来实现这一点。目前,wildfly 在启动时会出现错误:
[org.jboss.as.controller.management-operation](ServerService 线程池 - 45)WFLYCTL0013:操作(“添加”)失败 - 地址:([(“子系统”=>“邮件”),(“邮件- 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
...
Run Code Online (Sandbox Code Playgroud)
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" ]
Run Code Online (Sandbox Code Playgroud)
独立-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>
...
Run Code Online (Sandbox Code Playgroud)
差不多了。在您的 docker 文件中,您已经定义了环境变量,因此您需要在 wildfly 配置中将它们引用为环境变量。最简单的方法是为您的环境变量添加env.
前缀。因此,在您的示例中,您有 env 变量HOST
, SSL
, USERNAME
... 您可以在standalone.xml 中引用它们,如下所示:
<smtp-server password="${env.PASSWORD}" username="${env.USERNAME}" ssl="${env.SSL}" outbound-socket-binding-ref="mail-smtp"/> </mail-session>
Run Code Online (Sandbox Code Playgroud)
如果没有env.
前缀,jboss/wildfly 将尝试将表达式解析为 jvm 属性,您必须将其指定为 jvm-D
标志。
您还可以在表达式中使用默认值回退,例如:
ssl="${env.SSL:true}"
Run Code Online (Sandbox Code Playgroud)
这样,ssl将被设置环境变量named的值SSL
,如果这样的var不存在,服务器将回退到true
.
快乐黑客
归档时间: |
|
查看次数: |
3437 次 |
最近记录: |