URL-адрес jdbc для mysql от докера до локального хоста не работает без режима хоста

У меня есть локальное загрузочное приложение Spring, которое подключается к локальному MySQL и работает нормально.

Для подключения я использую следующее свойство:

spring.datasource.url=jdbc:mysql://localhost:3306/pitstop?useSSL=false&useUnicode=true&characterEncoding=utf8&serverTimezone=UTC

Я хотел бы поместить свое приложение в докер и попытаться подключиться к локальной базе данных. Поэтому мне нужно изменить MySQL url.

Я использовал эту команду для получения локального IP ip route show | grep "default" | awk '{print $3}' результат 192.168.1.1. Я изменяю свой URL следующим образом

spring.datasource.url=jdbc:mysql://192.168.1.1:3306/pitstop?useSSL=false&useUnicode=true&characterEncoding=utf8&serverTimezone=UTC

и попробуйте запустить контейнер docker с моим приложением командой docker run -p 9001:9001 --network=bizon4ik --rm bizon4ik/mycontainer результат будет исключением:

Caused by: com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.

Я пытался найти другой IP. Я использовал команду ip addr show и нашел следующую запись:

 3: wlp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 30:52:cb:db:8d:e0 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.102/24 brd 192.168.1.255 scope global dynamic noprefixroute wlp3s0

Поэтому, основываясь на этом, я взял 192.168.1.102 и изменил свой URL-адрес, но в результате получил то же исключение.

Чтобы убедиться, что найденные IP-адреса верны, я запускаю новый контейнер с чистой Ubuntu docker run -it --rm --network=bizon4ik ubuntu и проверяю упомянутый выше IP-адрес:

root@268c4d544328:/# nmap -p 3306 192.168.1.1

Starting Nmap 7.60 ( https://nmap.org ) at 2019-07-28 17:28 UTC
Nmap scan report for 192.168.1.1
Host is up (0.053s latency).

PORT     STATE    SERVICE
3306/tcp filtered mysql
root@268c4d544328:/# nmap -p 3306 192.168.1.102   

Starting Nmap 7.60 ( https://nmap.org ) at 2019-07-28 15:56 UTC
Nmap scan report for my-host (192.168.1.102)
Host is up (0.000088s latency).

PORT     STATE  SERVICE
3306/tcp closed mysql

Итак, выглядит нормально, контейнер Ubuntu может пинговать мою БД. У вас есть идеи, почему я не могу подключиться через приложение к БД?

Примечание:

Проверил в БД SHOW GRANTS; результат GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION

Я также проверил файл /etc/mysql/my.cnf. У него есть только эти записи:

!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/

у меня нет ~/.my.cnf

Выход nmap сообщает, что порт 3306 является closed или filtered не openдокументы. Где вы запускали команду ip route show? Хост или контейнер приложения?

b0gusb 29.07.2019 09:38

Вы запускаете БД на своем хосте или она также находится в док-контейнере? Если это на хосте без контейнера, то почему? Если бы БД была в контейнере, у вас не было бы проблем с подключением.

Sasha Shpota 29.07.2019 10:21

@b0gusb Я использовал route на хосте

Bizon4ik 29.07.2019 10:28

@Bizon4ik беги ip внутри контейнера. Это дает вам IP-адрес шлюза по умолчанию. Обычно это docker0 сетевой интерфейс в мостовой сети. Вы должны иметь возможность подключиться к этому IP

b0gusb 29.07.2019 10:31

@SashaShpota моя БД в хосте

Bizon4ik 29.07.2019 10:31

@ b0gusb Я пытался. Я дал мне какой-то IP, который начинается с 72..... Но результат тот же.

Bizon4ik 29.07.2019 10:33
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
7
510
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема была в bind-address для MySQL. Я посмотрел это в /etc/mysql/my.cnf однако правильное место /etc/mysql/mysql.conf.d/mysqld.cnf

Другие вопросы по теме