Я пытаюсь запустить приложение весенней загрузки (в виде простого REST API) и сервер MySQL в двух отдельных контейнерах Docker. Но я не могу получить соединение JDBC в приложении Spring для подключения к MySQL. Они оба работают независимо, и реализация работает, когда я запускаю весеннюю загрузку и mysql локально.
docker-compose.yml
version: '3'
services:
database:
image: mysql:latest
container_name: mysqldb
command: --default-authentication-plugin=mysql_native_password
restart: always
environment:
- MYSQL_ROOT_PASSWORD=password
expose:
- 3306
ports:
- 3306:3306
networks:
- backend
volumes:
- "dbdata:/var/lib/mysql"
web:
container_name: springboot
build: .
depends_on:
- database
expose:
- 8080
ports:
- 8080:8080
networks:
- backend
networks:
backend:
volumes:
dbdata:
В приложении весенней загрузки:
val dataSource = DriverManagerDataSource()
dataSource.setDriverClassName("com.mysql.jdbc.Driver")
dataSource.setUrl("jdbc:mysql://mysqldb:3306/$dbName?characterEncoding=latin1")
dataSource.username = "dev"
dataSource.password = "password"
val jdbcTemplate = JdbcTemplate(dataSource)
Ошибка возврата из пружинной загрузки:
{
"status": 500,
"error": "Internal Server Error",
"message": "Failed to obtain JDBC Connection; nested exception is com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure\n\nThe last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server."
}
Я МОГУ подключиться к контейнеру mysql из загрузочного контейнера пружины через mysql cli. Итак, похоже, что контейнер Springboot может разрешить «mysqldb».
Кажется, все должно быть довольно просто. Я не уверен, в чем заключается ошибка, но я предполагаю, что это как-то связано с внутренней работой пружинных сапог, с которой я не знаком.