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