"com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: сбой линии связи" - PullRequest
0 голосов
/ 12 мая 2018

Я видел многочисленные ответы на этот вопрос, и я пытаюсь решить мой сегодня. (Я уже потратил на это 2+ дня, но все еще не знал).

Вот моя ситуация:

  1. Это на моем Mac 10.13.1

  2. MySQL работает с одним док-контейнером, и у меня установлены все эти привилегии.

  3. docker exec -it mysql bash ==> cd /etc => где я нашел файл my.cnf, в который я добавил bind-address=127.0.0.1

  4. У меня есть локальный MySQL Workbench, который может устанавливать соединения с этим сервером MySQL 127.0.0.1:3306 и получает результат из базы данных.

  5. Но, когда мое приложение было запущено во втором контейнере Docker, я не смог подключить его к базе данных MySQL, которая находится в другом контейнере. Это та часть команды, которую я использовал при запуске приложения:

    docker run -d ... -e DB_URL=jdbc:mysql://127.0.0.1:3306/mydatabase --name myApp  --restart=always --link mysql myApp_t:latest
    

Но как только myApp запущен, я могу найти сообщение из его журналов как:

com.mysql.jdbc.exceptions.jdbc4.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.
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.8.0_111]
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[na:1.8.0_111]
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:1.8.0_111]
...

Любые подсказки, что еще я могу делать?

1 Ответ

0 голосов
/ 12 мая 2018

Это скорее вопрос докера, чем соединения MySQL / JDBC.Ваш второй докер-контейнер не может добраться до вашего первого, потому что там 127.0.0.1 указывает на сам контейнер, а не на первый контейнер.

Прежде всего, вам не следует настраивать bind_address в первом контейнере как 127.0.0.1.Вам нужно либо оставить это значение, либо установить 0.0.0.0.Вы, вероятно, не перезапускали MySQL, иначе вы бы не смогли подключиться из MySQL Workbench на своей собственной машине.

Возможность подключения через 127.0.0.1 с вашего компьютера к приложению, работающему в Docker.доступно только на вашей машине, а не между контейнерами.

Ваша командная строка показывает, что вы связали контейнер myApp с контейнером mysql (используя --link mysql).Это означает, что в качестве URL-адреса соединения вы должны использовать:

jdbc:mysql://mysql:3306/mydatabase

То есть: замените 127.0.0.1 на mysql, поскольку оно используется в качестве имени хоста вашего контейнера mysql для связи между этими двумя контейнерами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...