处理Docker容器内的tomcat应用程序的configuration

我有一个在Tomcat应用程序服务器中运行的应用程序。 它有一些设置,可能会改变环境。 例如,要使用的远程API的数据库凭证或主机/端口。

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

到目前为止,我正在考虑将$CATALINA_HOME/conf放入一个卷中,并简单地在docker主机上设置上下文文件。 也许有更好的办法?

我找不到使用环境variables来configurationtomcat的方法。 我必须更改应用程序本身来阅读这些variables吗?

简单地说,在Docker中定制tomcat应用程序的方法是什么,而不是在构build时将configconfiguration到图像本身中?

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

我通过在运行时通过swarm或envsubstr docker run -e传递环境variables来解决这个问题,并在入口点脚本中使用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一部分,因此请确保在您的图像中可用。