docker-compose переменные окружения для tomcat context.xml

У меня следующая проблема: я хочу определить в моем файле docker-compose переменную окружения для моего соединения с БД.

services:
   myapp:
      build: SessionHandler
      container_name: sessionhandler
      environment:
         - JAVA_OPTS=-DdbUrl=10.5.0.1 -DdbPort=3306 -DdbUsername=root -DdbPassword=root
ports: 
    - "8080:8080"
volumes:
    - ./myapp/tomcat/conf/:/opt/tomcat/conf/

Я хочу использовать эти переменные в моем context.xml, таким образом:

<Context>
<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/myapp" 
    username="${dbUsername}"
    password="${dbPassword}"
    url="jdbc:mysql://${dbUrl}:${dbPort}/myapp?useUnicode=true&amp;characterEncoding=UTF-8&amp;characterSetResults=UTF-8"
/>
</Context>

Но это не работает. (Браузер дает мне 500)

Если я открою переменные в context.xml, таким образом:

    <Context>
<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/myapp" 
    username="root"
    password="root"
    url="jdbc:mysql://10.5.0.1:3306/myapp?useUnicode=true&amp;characterEncoding=UTF-8&amp;characterSetResults=UTF-8"
/>
</Context>

все работает. Может кто-нибудь мне помочь? Большое спасибо.

ОБНОВИТЬ

Я вставил в файл catalina.properties следующие системные переменные:

dbUrl=10.5.0.1 
dbPort=3306 
dbUsername=root 
dbPassword=root

и 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/myapp" 
    username="${dbUsername}"
    password="${dbPassword}"
    url="jdbc:mysql://${dbUrl}:${dbPort}/myapp?useUnicode=true&amp;characterEncoding=UTF-8&amp;characterSetResults=UTF-8"
/>

И работает. Поэтому я попытался определить их пустыми, чтобы определить их в docker-compose.yml:

dbUrl= 
dbPort= 
dbUsername= 
dbPassword=

Но это не работает. Любая помощь, пожалуйста?

1 ответ

Попробуй дальше, напрямую добавь эти параметры в качестве переменной среды контейнера, думаю если нет java -D чтобы указать эти среды, переменная среды в контейнере также может быть передана Java-программам.

services:
  myapp:
    build: SessionHandler
    container_name: sessionhandler
    environment:
      - dbUrl=10.5.0.1
      - dbPort=3306
      - dbUsername=root
      - dbPassword=root
Другие вопросы по тегам