我有一个在Tomcat应用服务器内运行的应用。它有一堆可能在环境之间变化的设置。例如,要使用的远程API的数据库凭据或主机/端口。
它们的默认值被烘焙到.war文件中。基本上,它们在web.xml中。什么是通过参数docker run
改变它们的最佳方法?
到目前为止,我正在考虑将$CATALINA_HOME/conf
放入卷中,只需在docker主机上设置上下文文件。也许有更好的方法?
我找不到使用环境变量来配置tomcat的方法。我是否必须更改应用程序本身以阅读这些变量?
简单地说,有什么方法可以在docker中自定义tomcat应用程序,而无需在构建时将图像本身烘焙配置?
如果重要,我正在使用docker hub的官方tomcat图像。
答案 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"/>
envsubstr
是gettext
的一部分,因此请确保您的图片可以使用。