Как передать в проект Java ссылку на подключение к БД из файла Docker-compose или из Dockerfile?
Есть проект Java собирающийся в war-архив. Этот проект пишу у себя на ПК под Windows, поэтому в настройках подключения к БД прописано следующее:
spring.datasource.url=jdbc:mysql://localhost:3306/db_users?allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
Пытаюсь запустить в Docker container, монтирую директорию с war-архивом в контейнер. Для этого загрузил 3 образа: tomcat:9.0.39-jdk11-openjdk; mysql; adminer.
Написал следующий YAML-файл для Docker-compose (не уверен, что верный):
services:
authorizationService:
image: tomcat
volumes:
- E:\Authorization_service_prjct\war_arсhive:/usr/local/tomcat/webapps
ports:
- "8888:8080"
links:
- "database:db_users"
database:
image: mysql
command: --default-authentication-plugin=mysql_native_password
restart: always
environment:
MYSQL_ROOT_USER: root
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: db_users
ports:
- "3306:3306"
PhpMyAdmin:
image: adminer
restart: always
ports:
- "8181:8080"
links:
- database:mysql
В этом файле для доступа сервиса с приложением authorizationService к БД создал ссылку:
links:
- "database:db_users"
Теперь для подключения к БД моя строка подключения в приложении по идее должна выглядеть вот так:
spring.datasource.url=jdbc:mysql://database:3306/db_users?allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=UTC
Но я этого сделать не могу потому что собираю war-фрхив у себя на ПК под Windows и ведь для того чтобы он нормально собрался и запустился в строке подключения должно быть
mysql://localhost:3306, а не mysql://database:3306
Как при формировании образов или запуске контейнеров передать в проект Java ссылку на подключение к БД из файла Docker-compose или из Dockerfile?
Ответы (1 шт):
Возможно, так:
services:
authorizationService:
#...
environment:
- SPRING_DATASOURCE_URL=jdbc:mysql://database:3306/db_users?allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=UTC