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&characterEncoding=UTF-8&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&characterEncoding=UTF-8&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&characterEncoding=UTF-8&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