在Docker中无法使用Spring连接到MySQL

我有一个docker容器中运行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 

我想在另一个docker容器中运行我的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"] 

我的application.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警告。

看起来你的数据库根本不工作。 您可以通过在第二个terminal运行docker psdocker exec -it mysql-db mysql -u root -proot db来validation。 它可能会失败。 原因是-e MYSQL_USER=root你使用的-e MYSQL_USER=root标志。 这个docker镜像用你提供的密码创buildroot用户,所以当你想再次创buildroot用户时,失败并closures容器。 只要将其更改为-e MYSQL_USER=myuser ,它应该可以工作。