docker-compose:将变量传递给tomcat上下文

时间:2018-06-08 08:30:45

标签: database docker tomcat docker-compose environment-variables

我有以下问题:

我想在docker-compose.yml文件中定义一个环境变量,如下所示:

def __str__(self):
    return "Cost solution : " + str(self.cost) + "\nSolution: " + str(self.solution) + "\n\nTable:" + str(self.table)

使用tomcat部署webapp应用程序。我想以下列方式将变量 WEBAPPDB 用于context.xml文件中:

services:
  nginx:
    image: nginx:1.13
    container_name: nginx
    restart: always
    ports: 
        - "80:80"
        - "9090:9090"
    volumes: 
        - ./nginx/conf.d:/etc/nginx/conf.d
        - ./nginx/html:/usr/share/nginx/html

  webapp:
    build: WebApp
    container_name: webapp
    environment:
      - WEBAPPDB=jdbc:mysql://192.168.101.129:3306/webapp?useUnicode=true&characterEncoding=UTF-8&characterSetResults=UTF-8
    expose: 
        - "8080"
    depends_on:
        - nginx
version: '2'

我该怎么做?谢谢你的帮助。

2 个答案:

答案 0 :(得分:0)

根据文件Tomcat Configuration Reference

  

Tomcat配置文件被格式化为无模式XML;分子   和属性区分大小写。 Apache Ant风格的变量   支持替代;名为propname的系统属性   可以使用语法$ {propname}在配置文件中使用。所有   系统属性可用,包括使用-D设置的属性   语法,由JVM和那些自动提供的语法   在$ CATALINA_BASE / conf / catalina.properties文件中配置。

为了使其工作,SELECT EVENTDETAILID, SUM(CASE WHEN PRICETYPE = 0 THEN PRICE ELSE 0 END) + MAX(CASE WHEN PRICETYPE = 1 THEN PRICE ELSE 0 END) AS total FROM yourTable GROUP BY EVENTDETAILID ORDER BY EVENTDETAILID; 中的WEBAPPDB变量应该可用作系统属性。您可以通过多种方式设置系统属性(请参阅Tomcat 7 - where do I set 'system properties'? )。在您的情况下,您可以在context.xml文件中设置环境变量JAVA_OPTS

docker-compose

答案 1 :(得分:0)

以这种方式工作:

docker-compose.yml

services:
  webapp:
    build: webapp
    container_name: webapp
    environment:
      - JAVA_OPTS= -Ddb.url=192.168.101.129 -Ddb.port=3306 -Ddb.username=test -Ddb.password=test

Dockerfile

FROM bp91/ubuntu16.04-tomcat7-java8

COPY webapps /tmp/webapps/

ADD tomcat/bin /opt/tomcat/bin/

RUN chmod 775 /opt/tomcat/bin/catalina.sh

RUN chown root:root /opt/tomcat/bin/catalina.sh

RUN cp -r /tmp/webapps/* /opt/tomcat/webapps/

ENV JAVA_OPTS ""

EXPOSE 8282

CMD sh /opt/tomcat/bin/catalina.sh $JAVA_OPTS && touch /opt/tomcat/logs/webapp.log && tail -f /opt/tomcat/logs/webapp.log

server.xml

<GlobalNamingResources>
   <Resource
      auth="Container"
      driverClassName="com.mysql.jdbc.Driver"
      type="javax.sql.DataSource"
      global="jdbc/webapp"

      initialSize="0"
      maxActive="10"
      maxIdle="5"
      maxWait="5000"
      minIdle="0"
      timeBetweenEvictionRunsMillis="34000"
      minEvictableIdleTimeMillis="55000"

      testOnBorrow="true"
      testWhileIdle="true"
      testOnReturn="false"
      validationQuery="SELECT 1 FROM dual"
      validationInterval="30000"
      removeAbandoned="true"
      removeAbandonedTimeout="10"

      name="jdbc/webapp"
      username="${db.username}"
      password="${db.password}"
      url="jdbc:mysql://${db.url}:${db.port}/webapp?useUnicode=true&amp;characterEncoding=UTF-8&amp;characterSetResults=UTF-8"
</GlobalNamingResources>