Сейчас я пробую несколько новых вещей и хотел создать небольшое приложение Spring/mySQL. Я настроил файл docker-compose следующим образом:
version: '3.3'
services:
docker-mysql:
container_name: docker-mysql
image: mysql:5.7
restart: always
environment:
- MYSQL_ROOT_PASSWORD=root
volumes:
- db_data:/var/lib/mysql
- ./initalize.sql:/docker-entrypoint-initdb.d/initalize.sql:ro
ports:
- 3306:3306
expose:
- 3306
volumes:
db_data: {}
В initalize.sql я создал базовую базу данных TEST с несколькими тестовыми таблицами и заполнил некоторые из них, все работает нормально, я мог запрашивать элементы через командную строку.
С другой стороны, я не могу подключиться к нему через Spring, у меня есть следующий файл application.properties:
spring.jpa.hibernate.ddl-auto=none
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect
spring.datasource.url=jdbc:mysql://localhost:3306/TEST?useSSL=false
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
Каждый раз, когда я пытаюсь запустить приложение, оно получает (я не запускаю приложение в образе докера, оно работает в Windows) com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure error, and it can't find the server.
Я также пытался подключиться, чтобы изменить URL-адрес источника данных на jdbc:mysql://docker-mysql:3306/TEST?useSSL=false, но это тоже не сработало.




Если вы хотите, чтобы это работало:
Я также попытался подключиться, чтобы изменить URL-адрес источника данных на jdbc:mysql://docker-mysql:3306/TEST?useSSL=false, но это тоже не сработало.
Ваше приложение Spring Boot должно работать как док-контейнер в той же виртуальной сети, что и ваш док-контейнер MySQL, или оба контейнера должны работать в мостовой сети по умолчанию, предоставляемой Docker.
То, что вы собираетесь сделать, будет работать только в том случае, если вы разрешите маршрутизацию доступа к вашему хосту:порту в контейнер mariadb. Вам придется не только открыть порт, но и разместить его в хост-сети. См. https://docs.docker.com/network/drivers/host/ Обратите внимание, что в этой настройке вы по-прежнему не сможете получить доступ к локальному хосту:порту, а к имени хоста:порту.
Другая возможность — поместить клиентское приложение в другой докер-контейнер в той же сети. См. https://docs.docker.com/network/
Если приложение Spring-Boot также работает в контейнере, оно должно работать в той же виртуальной сети, что и база данных MySQL, а приложение Spring-Boot должно использовать
docker-mysqlв качестве имени хоста для базы данных.