【发布时间】:2020-11-17 04:24:06
【问题描述】:
我有一个包含三个不同数据库连接的应用程序级 context.xml,我的应用程序成功连接并针对这些数据库正常工作。将war文件添加到Tomcat Docker镜像中,容器运行良好。
但是,我真正需要的是能够在不同的环境(开发、QA 和生产)中使用不同的 context.xml 文件来调出我的 WAR 文件。每个环境都有自己的一组三个数据库连接(即唯一的 URL/用户名/密码,但资源名称相同)。
Tomcat 中是否有一种机制,我可以在启动时将环境变量传递到 Tomcat 容器中,并指定要使用的上下文文件?例如如果我有 META-INF/context_dev.xml、META-INF/context_qa.xml 和 META-INF/context_prod.xml。
或者,我应该使用其他一些不同的机制来让一个 Docker 映像与三组不同的数据库资源一起工作?
谢谢, 约翰
【问题讨论】:
-
您可以将特定于环境的配置文件挂载到容器映像中包含的配置文件之上。这样你就可以在不同的配置文件中使用相同的镜像,而无需在配置更改时重新构建镜像。
-
感谢您的回复,但我想将所有配置信息保留在 docker 映像中,因此不需要在其他地方维护上下文文件。当我们最终迁移到 Kubernetes 时尤其如此,它运行的服务器可能会有所不同。
-
对于 Kubernetes,您应该为此目的使用 configmap。您可以使用 configmap 和 kustomize 有效地维护多环境配置。当您将配置存储在镜像中时,配置更改需要构建和部署镜像,这可以使用 configmaps 来避免。
-
我想重点是“最终”这个词 :-) 我们需要一个只适用于 Docker 的中间解决方案。
-
没有开箱即用的配置来从 Kubernetes 服务器建立 JNDI 数据源。这实际上是我一直感兴趣的研究。如果这是您想进一步讨论的内容,请加入 Tomcat 用户的邮件列表并提出该主题进行讨论。
标签: docker tomcat context.xml