Невозможно соединиться MySQL с Spring Boot в docker -compose - PullRequest
0 голосов
/ 22 апреля 2020

У меня проблема при запуске весенней загрузки с mysql с использованием Docker. Локально работает без Docker. Мой dockerfile

FROM maven:3.3-jdk-8-alpine

ENV MAVEN_HOME /usr/lib/mvn
ENV PATH $MAVEN_HOME/bin:$PATH
ENV SPRING_DATASOURCE_URL jdbc:mysql://my-db:3306/registration_springboot?createDatabaseIfNotExist=true

ENV SPRING_DATASOURCE_USERNAME vnphu
ENV SPRING_DATASOURCE_PASSWORD password

docker -compose.yml file

version: '3'
services:
  my-db:
     image: mysql/mysql-server:5.7
     container_name: my-db
     environment:
         MYSQL_USER: vnphu
         MYSQL_DATABASE: registration_springboot
         MYSQL_PASSWORD: password
         MYSQL_ROOT_PASSWORD: password
     ports:
          - '3306-3306'

  web:
    build: .
    working_dir: /app
    volumes:
        - .:/app
        - ~/.m2:/root/.m2
    ports:
        - "8080:8080"
    command: mvn clean spring-boot:run
    depends_on:
        - my-db

Ошибка при запуске: docker -compose up --build

Caused by: java.net.ConnectException: Connection refused (Connection refused)
web_1    |      at java.net.PlainSocketImpl.socketConnect(Native Method) ~[na:1.8.0_121]
web_1    |      at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) ~[na:1.8.0_121]
web_1    |      at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) ~[na:1.8.0_121]
web_1    |      at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) ~[na:1.8.0_121]
web_1    |      at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) ~[na:1.8.0_121]
web_1    |      at java.net.Socket.connect(Socket.java:589) ~[na:1.8.0_121]
web_1    |      at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:155) ~[mysql-connector-java-8.0.19.jar:8.0.19]
web_1    |      at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:65) ~[mysql-connector-java-8.0.19.jar:8.0.19]
web_1    |      ... 115 common frames omitted

Ответы [ 2 ]

1 голос
/ 22 апреля 2020

web приложение пытается подключиться к my-db, который еще не доступен (база данных все еще загружается), вы можете использовать любое из следующих решений в зависимости от ваших предпочтений.

  1. Ошибка перезапуска

    изменить docker -создать файл в

    web:
     ports: 
       "8080:8080"
     restart:on-failure
    
  2. sleep

    изменить docker -создать файл в среде

    web:
     ports:
       "8080:8080"
     environment:
       -SLEEP_LENGTH=5
    
  3. ожидание этого. sh файл

    ожидание этого файла

    это подход требует, чтобы вы изменили свой Dockerfile, а также docker -компонентный файл

0 голосов
/ 23 апреля 2020

Проблема с моим ENV в Dockerfile, потому что у меня также есть переменная среды с тем же именем в Shell, которая будет иметь приоритет.

ENV SPRING_DATASOURCE_URL jdbc:mysql://my-db:3306/registration_springboot?createDatabaseIfNotExist=true

После добавления переменной в среду в docker - compose.yml, сработало

web:
   environment:
        SPRING_DATASOURCE_URL: jdbc:mysql://my-db:3306/registration_springboot?createDatabaseIfNotExist=true

docker -compose.yml будет выглядеть следующим образом:

  1. Compose file
  2. Переменные среды оболочки
  3. Файл среды
  4. Dockerfile
  5. Переменная не определена

Более подробную информацию можно найти в этой статье: https://vsupalov.com/override-docker-compose-dot-env/

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