Невозможно подключиться к Mysql серверу в docker из другого контейнера - PullRequest
0 голосов
/ 08 января 2020

Я сижу сейчас и ищу решение более 6 часов. Пожалуйста, помогите мне. Прежде всего я постараюсь объяснить мою проблему. Я создал MySql базу данных, используя изображение (в dcoker), но когда я хочу создать другой контейнер (Sprig Boot) и подключиться к базе данных, я не могу. Я попытался создать только образ MySql и подключиться к intellij, и все правильно. Только когда я пытаюсь создать проект в контейнере, возникает проблема ...

Мой docer-compose

version: '3'
services:
  api:
    build: ./springboot-api-docker
    ports:
    - "9090:9090"
    depends_on:
      - database
  database:
    container_name: 'localhost'
    image: mysql:latest
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_PASSWORD: password
      MYSQL_USER: user
      MYSQL_DATABASE: animaldb
    ports:
      - "3307:3306"
    restart: always

Свойства приложения

server.port = 9090

spring.jpa.hibernate.ddl-auto=create
spring.datasource.url=jdbc:mysql://localhost:3307/animaldb?autoReconnect=true&useSSL=false
spring.datasource.username=user
spring.datasource.password=password

и DocerFile

FROM openjdk:8u201-jdk-alpine3.9
ADD target/springboot-api-docker-0.0.1-SNAPSHOT.jar .
EXPOSE 9090
CMD java -jar springboot-api-docker-0.0.1-SNAPSHOT.jar

Забавно, потому что ... сначала я хочу изменить имя контейнера "localhost" на другое. Но когда я менялся, я не мог запустить Spring Bot Application даже из intellij. Я создал изображение MySql в docker, и я пытался соединиться в intellij. Это было ужасно, но когда я хочу использовать SpringBoot Application в caontainer, тогда возникает проблема. Я еще не нашел решения для себя. Я буду очень благодарен за каждую помощь.

Мои ошибки здесь.

java. sql .SQLNonTransientConnectionException: Не удалось создать соединение с сервером базы данных. Попытка переподключения 3 раза. Сдаюсь.

И весь текст с консоли. Возможно, вы найдете это быстрее.

Причина: org.hibernate.service.spi.ServiceException: Невозможно создать запрошенную службу [org.hibernate.engine.jdb c .env.spi. JdbcEnvironment] api_1 | at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService (AbstractServiceRegistryImpl. java: 275) ~ [hibernate-core-5.4.9.Final.jar! /: 5.4.9.Final]

Вызвано by: com. mysql .cj.exceptions.CJCommunicationsException: сбой линии связи api_1 | api_1 | Последний пакет, успешно отправленный на сервер, был 0 миллисекунд go. Драйвер не получил никаких пакетов с сервера. api_1 |
at sun.reflect.NativeConstructorAccessorImpl.newInstance0 (собственный метод) ~ [na: 1.8.0_201] api_1 | at sun.reflect.NativeConstructorAccessorImpl.newInstance (NativeConstructorAccessorImpl. java: 62) ~ [na: 1.8.0_201] api_1 | at sun.reflect.DelegatingConstructorAccessorImpl.newInstance (DelegatingConstructorAccessorImpl. java: 45) ~ [na: 1.8.0_201] api_1 | в java .lang.reflect.Constructor.newInstance (Конструктор. java: 423) ~ [na: 1.8.0_201] api_1 | в com. mysql .cj.exceptions.ExceptionFactory.createException (ExceptionFactory. java: 61) ~ [mysql -connector- java -8.0.18.jar! /: 8.0.18] api_1 | в com. mysql .cj.exceptions.ExceptionFactory.createException (ExceptionFactory. java: 105) ~ [mysql -connector- java -8.0.18.jar! /: 8.0.18] api_1 | в com. mysql .cj.exceptions.ExceptionFactory.createException (ExceptionFactory. java: 151) ~ [mysql -connector- java -8.0.18.jar! /: 8.0.18] api_1 | в com. mysql .cj.exceptions.ExceptionFactory.createCommunicationsException (ExceptionFactory. java: 167) ~ [mysql -connector- java -8.0.18.jar! /: 8.0.18] api_1 | в com. mysql .cj.protocol.a.NativeSocketConnection.connect (NativeSocketConnection. java: 91) ~ [mysql -connector- java -8.0.18.jar! /: 8.0.18] api_1 | at com. mysql .cj.NativeSession.connect (NativeSession. java: 144) ~ [mysql -connector- java -8.0.18.jar! /: 8.0.18] api_1 | в com. mysql .cj.jdb c .ConnectionImpl.connectWithRetries (ConnectionImpl. java: 850) ~ [mysql -connector- java -8.0.18.jar! /: 8.0.18] api_1 | ... 58 общих кадров пропущено api_1 | Вызвано: java. net .ConnectException: соединение отклонено (соединение отклонено) api_1 | в java. net .PlainSocketImpl.socketConnect (собственный метод) ~ [na: 1.8.0_201] api_1 | в java. net .AbstractPlainSocketImpl.doConnect (AbstractPlainSocketImpl. java: 350) ~ [na: 1.8.0_201] api_1 | в java. net .AbstractPlainSocketImpl.connectToAddress (AbstractPlainSocketImpl. java: 206) ~ [na: 1.8.0_201] api_1 | на java. net. AbstractPlainSocketImpl.connect (AbstractPlainSocketImpl. java: 188) ~ [na: 1.8.0_201] api_1 | в java. net .SocksSocketImpl.connect (SocksSocketImpl. java: 392) ~ [na: 1.8.0_201] api_1 | в java. net .Socket.connect (Socket. java: 589) ~ [na: 1.8.0_201] api_1 | в com. mysql .cj.protocol.StandardSocketFactory.connect (StandardSocketFactory. java: 155) ~ [mysql -connector- java -8.0.18.jar! /: 8.0.18] api_1 | в com. mysql .cj.protocol.a.NativeSocketConnection.connect (NativeSocketConnection. java: 65) ~ [mysql -connector- java -8.0.18.jar! /: 8.0.18] api_1 | ... 60 общих кадров пропущено

1 Ответ

0 голосов
/ 08 января 2020

Неправильно использовать localhost в качестве docker имени контейнера.

Измените localhost на базу данных, подобную этой.

localhost - это всегда ваш локальный компьютер или локальный docker, а не внешний ресурс.

docker -компонент

version: '3'
services:
  api:
    build: ./springboot-api-docker
    ports:
    - "9090:9090"
    depends_on:
      - database
    links:
      - database
  database:
    container_name: 'database'
    image: mysql:latest
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_PASSWORD: password
      MYSQL_USER: user
      MYSQL_DATABASE: animaldb
    ports:
      - "3307:3306"
    restart: always

application.properties :

server.port = 9090

spring.jpa.hibernate.ddl-auto=create
spring.datasource.url=jdbc:mysql://database: 3306/animaldb?autoReconnect=true&useSSL=false
spring.datasource.username=user
spring.datasource.password=password
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...