处理docker容器内的tomcat应用程序配置

时间:2017-07-12 19:42:52

标签: tomcat docker

我有一个在Tomcat应用服务器内运行的应用。它有一堆可能在环境之间变化的设置。例如,要使用的远程API的数据库凭据或主机/端口。

它们的默认值被烘焙到.war文件中。基本上,它们在web.xml中。什么是通过参数docker run改变它们的最佳方法?

到目前为止,我正在考虑将$CATALINA_HOME/conf放入卷中,只需在docker主机上设置上下文文件。也许有更好的方法?

我找不到使用环境变量来配置tomcat的方法。我是否必须更改应用程序本身以阅读这些变量?

简单地说,有什么方法可以在docker中自定义tomcat应用程序,而无需在构建时将图像本身烘焙配置?

如果重要,我正在使用docker hub的官方tomcat图像。

1 个答案:

答案 0 :(得分:1)

我通过在运行时通过swarm或docker run -e传递环境变量来解决这个问题,并在入口点脚本中使用envsubstr来交换我需要的东西。

<强> Dockerfile:

ENTRYPOINT: ["my_script"]

<强> my_script:

envsubstr < server.dist.xml > server.xml
catalina.sh start

<强> server.dist.xml:

<Resource name="jdbc/${DRIVER}" auth="Container"
              type="javax.sql.DataSource" driverClassName="${DRIVER_NAME}"
              url="${DRIVER_URL}"
              username="${NAME}" password="${PASSWORD}" maxActive="20" maxIdle="10"
              maxWait="-1"/> 

envsubstrgettext的一部分,因此请确保您的图片可以使用。