SpringBoot docker连接到mysql docker容器

时间:2019-03-13 18:37:29

标签: mysql spring spring-boot docker containers

我拉出mysql docker映像并使用以下命令运行容器:

docker run --name myapp-mysql -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=mydb -p 3306:3306 -d mysql:latest

这时,springBoot在本地正在工作。它与mysql连接:

spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=root

现在,我希望springBoot应用程序也位于同一服务器上的单独docker容器中。为此,我正在使用Dockerfile:

FROM openjdk:8-jdk-alpine
ADD target/myapp.jar myapp.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "myapp.jar"]

我从以下图片开始

docker run --name myapp -p 8080:8080 -it myapp:latest

现在springBoot容器找不到myslq容器。 我尝试:

docker run --name myapp -p 8080:8080 --link=myapp-mysql:mysql -it myapp:latest

但是同样它不能连接到mysql容器。如何将springBoot容器连接到mysql容器?

我还尝试将application.properties更改为:

spring.datasource.url=jdbc:mysql://myapp-mysql:3306/mydb
spring.datasource.username=root
spring.datasource.password=root

并使用以下命令启动springBoot:

docker run --name myapp -p 8080:8080 --link=myapp-mysql:mysql -it myapp:latest

再次无法连接到数据库:

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.

1 个答案:

答案 0 :(得分:0)

为了链接容器,我建议研究docker-compose。

如果您不想使用docker-compose,

首先,在您的springboot属性文件中,将URL更改为:

spring.datasource.url=jdbc:mysql://[container-name]:3306/mydb

就您而言,

docker run --name myapp-mysql -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=mydb -p 3306:3306 -d mysql:latest

容器名称:myapp-mysql

然后尝试运行两个容器。

如果它不起作用,则查看docker网络并将容器放在同一网络中。

Docker Network Creation