Как подключиться из Docker-контейнера с веб-сервисом к другому Docker-контейнеру с MySQL, используя JDBC? - PullRequest
0 голосов
/ 12 января 2019

Невозможно подключиться к MySQL, запущенному в док-контейнере, из другого док-контейнера с использованием JDBC. Я могу подключиться за пределами докера к каждому контейнеру, чтобы я знал, что они работают. Но контейнер в контейнер, использующий JDBC, не работает для меня.

На основе моего файла docker-compose я в настоящее время пробовал несколько комбинаций JDBC, включая (для URL JDBC) localhost, 0.0.0.0, 127.0.0.1, внутренние и внешние порты, имя_ контейнера, имя db и другие комбинации. .

Я также попытался добавить условие среды в файл docker-compose.

Также попытался использовать внутреннее сетевое имя докера.

Обыскал StackOverflow и попробовал любое предложение, которое могло бы сработать.

Пример синтаксиса JDBC с использованием имени контейнера db:

"jdbc: mysql: // test-mysql-docker: 3306 / ZipCodeLookup? UseSSL = false &" + "ServerTimezone = America / New_York и пользователь = корень & пароль = thepass & autoReconnect = истина";

version: '3'
services:
   app:
      build:
        context: .
        dockerfile: Dockerfile
      ports:
        - "8089:8080"
      volumes:
        -  /Users/mike/Library/apache-tomcat-9.0.7/conf/tomcat-users.xml:/usr/local/tomcat/conf/tomcat-users.xml
      depends_on: 
        - db

   db:
      image: mysql
      container_name: test-mysql-docker
      ports:
           - 3307:3306
      volumes:
       - ./ZipCodeLookup.sql:/docker-entrypoint-initdb.d/ZipCodeLookup.sql
      environment:
           MYSQL_ROOT_PASSWORD: "thepass"

Ожидаемым результатом будет результат почтового индекса SQL от службы, запущенной в первом приложении-контейнере Docker.

Фактический результат - ошибка, из-за которой службе не удалось связаться с базой данных после трехкратной попытки.

1 Ответ

0 голосов
/ 13 января 2019

Проблема заключалась в том, что мой WAR-файл был кэширован, и, хотя я отключил Docker, последующие перекомпиляции с использованием Docker Up использовали этот кэшированный War-файл.

Таким образом, выполнение "doune system prune -af" между сборками (возможно, лучший способ) фактически позволило мне попробовать разные сборки.

РЕШЕНИЕ: Используйте имя контейнера mysql, определенное в docker-compose. В моем случае это был правильный JDBC (из docker-compose выше):

    final String DATABASE_URL =
            "jdbc:mysql://test-mysql-docker:3306/ZipCodeLookup?useSSL=false&" +
                    "serverTimezone=America/New_York&user=root&password=thepass&autoReconnect=true";

Надеюсь, это поможет кому-то еще. :)

Спасибо всем.

...