docker-compose: передача переменной в контекст tomcat - PullRequest
0 голосов
/ 08 июня 2018

У меня следующая проблема:

Я хочу определить переменную среды в моем файле docker-compose.yml следующим образом:

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'

приложение webapp развернуто с помощью tomcat.Я хотел бы использовать переменную WEBAPPDB в файле context.xml следующим образом:

<Resource
        auth="Container"
        driverClassName="com.mysql.jdbc.Driver"
        type="javax.sql.DataSource"

        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="username"
        password="password"
        url="${WEBAPPDB}"
    />

Как я могу это сделать?спасибо за помощь.

Ответы [ 2 ]

0 голосов
/ 10 августа 2018

Работая таким образом:

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>
0 голосов
/ 08 июня 2018

Согласно документации Справочник по конфигурации Tomcat

Файлы конфигурации Tomcat отформатированы как XML без схемы;элементы и атрибуты чувствительны к регистру.Поддерживается подстановка переменных в стиле Apache Ant;системное свойство с именем propname может использоваться в файле конфигурации с использованием синтаксиса $ {propname}.Доступны все системные свойства, включая те, которые установлены с использованием синтаксиса -D, автоматически предоставляемые JVM и настроенные в файле $ CATALINA_BASE / conf / catalina.properties.

Чтобы сделать этоДля работы переменная WEBAPPDB в context.xml должна быть доступна как системное свойство.Вы можете установить системные свойства несколькими способами (см. Tomcat 7 - где я могу установить «системные свойства»? ).В вашем случае вы можете установить переменную окружения JAVA_OPTS в файле docker-compose:

environment:
  - JAVA_OPTS=-DWEBAPPDB=jdbc:mysql://192.168.101.129:3306/webapp?useUnicode=true&amp;characterEncoding=UTF-8&amp;characterSetResults=UTF-8
...