2017-07-12 164 views
1

我有一个在Tomcat应用程序服务器内部运行的应用程序。它有许多可能会在不同环境之间改变的设置。例如,要使用的远程API的数据库凭证或主机/端口。在Docker容器中处理tomcat应用程序的配置

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

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

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

简而言之,有什么方法可以在Docker中自定义tomcat应用程序,而无需在构建时将配置映射到映像本身?

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

回答

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的一部分,因此请确保在您的图像中可用。

相关问题