Docker + Tomcat + .properties -- 环境变量
Posted
技术标签:
【中文标题】Docker + Tomcat + .properties -- 环境变量【英文标题】:Docker + Tomcat + .properties -- Environment Variables 【发布时间】:2016-02-08 13:49:51 【问题描述】:我需要部署一个tomcat服务器,在里面设置mysql数据库的url
/META-INF/config.properties
到一个 docker 文件中。我们部署这些容器的方式,IP 不能硬编码到程序中。
有没有办法从这个文件中的系统中提取环境变量?我想做这样的事情:
mdms.db.url=jdbc:mysql://**$MYSQL_HOST**/db_mdms?useEncoding=true&characterEncoding=UTF-8&autoReconnect=true
mdms.db.username=root
mdms.db.password=thesecretsauce
我一直在网上搜索,发现我应该可以设置一些
-DMYSQL_HOST=$MYSQL_HOST
在启动应用程序但启动带有该标志的 tomcat 时没有成功,我无法让它工作。
我尝试过的另一件事是:
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations" value="/WEB-INF/config.properties"/>
<property name="ignoreResourceNotFound" value="true" />
<property name="searchSystemEnvironment" value="true" />
<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
</bean>
虽然这似乎也不起作用。
我也尝试过两者结合使用。
我在 Netbeans 中的 Xubuntu Linux 编程上运行(但如果有必要,我已经弄清楚如何在没有 netbeans 的情况下部署 tomcat)
我不是应用程序作者;我对 Tomcat/Java Web 应用程序也不是很流利。然而,这需要完成,并且存在语言障碍(或拒绝,我还没有弄清楚)阻止我让作者为我解决这个问题。
【问题讨论】:
【参考方案1】:我设法解决这个问题的方法是在 DockerFile 中设置 CATALINA_OPTS:
ENV CATALINA_OPTS="-Dkey=value"
例如,我的应用程序的整个 DockerFile 如下所示:
FROM tomcat:8.0-jre8
ENV spring.profiles.active=dev
ENV CATALINA_OPTS="-Dkey=value"
ADD myWar.war /usr/local/tomcat/webapps/
CMD ["catalina.sh", "run"]
【讨论】:
你是如何编辑你的 context.xml 的?这是使用 docker 命令还是直接完成的? @Righto,这个答案与编辑 context.xml 无关。 是否可以将 CATALINA_OPTS 从docker run
更改?
@Arashsoft - 回答有点晚了,但是是的:docker run -e CATALINA_OPTS=-Dkey=value --name [docker.container.name] -p 8080:8080 [serviceName]:[tag]
以上是关于Docker + Tomcat + .properties -- 环境变量的主要内容,如果未能解决你的问题,请参考以下文章