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 -- 环境变量的主要内容,如果未能解决你的问题,请参考以下文章

如何在docker部署安装tomcat环境

Docker Review - docker部署Tomcat & Nginx

docker安装tomcat需要安装jdk吗

Docker和tomcat有啥关系呢

制作tomcat docker

结合Docker 搭建tomcat 集群