Не удается подключиться к MySQL с помощью Spring в Docker

0

У меня есть mysql, работающий в контейнере докеров:

docker run -it --name mysql-db -e MYSQL_ROOT_PASSWORD=root \
    -e MYSQL_DATABASE=db -e MYSQL_USER=root -e MYSQL_PASSWORD=root mysql:latest
docker start mysql-db

Я хочу запустить приложение Spring Boot (с Maven) в другом контейнере докера:

docker build -t java-app .
docker run -it --name java-app --link mysql-db:mysql -p 8080:8080 java-app
docker start java-app

Но я получаю исключение:

Причина: java.net.ConnectException: соединение отклонено (соединение отклонено)

Мой Dockerfile:

FROM java:8
ADD target/demo-0.0.1-SNAPSHOT.jar /usr/share/demo/demo.jar 
ENTRYPOINT ["/usr/bin/java", "-jar", "/usr/share/demo/demo.jar"]  

Мое приложение.yml:

spring:
    # General JPA properties
    jpa:
        show-sql: false
        database-platform: org.hibernate.dialect.MySQL57Dialect
        # Hibernate Specific properties
        hibernate:
            ddl-auto: create
        properties:
            hibernate:
                format_sql: false
    # DataSource configuration
    datasource:
        url: jdbc:mysql://mysql:3306/db
        username: root
        password: root

В чем моя проблема?

В журналах MySQL есть предупреждения о режиме -skip-name-resolve mode.

Теги:
docker
spring-boot

1 ответ

1
Лучший ответ

Похоже, ваша база данных вообще не работает. Вы можете проверить это, запустив docker ps или docker exec -it mysql-db mysql -u root -proot db в 2-м терминале. Вероятно, это провалится. Причиной этому является -e MYSQL_USER=root флаг, который вы используете. Это изображение докеры создает пользователя root с предоставленным вами паролем, поэтому, когда вы хотите снова создать пользователя root, он не работает и закрывает контейнер. Просто измените его на -e MYSQL_USER=myuser и он должен работать.

  • 0
    База данных работает, я проверял обеими командами. И твой совет ничего не изменил. Но все равно спасибо.
  • 1
    Я воспроизвел ваши команды, и БД не удалось полностью инициализировать. Вы запускаете docker снова, но не уверены, что он вызывает работу db. Когда вы запускаете мою команду docker exec, вы можете выполнять такие запросы: SHOW TABLES; ?
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню