将 MySQL 和 Spring Boot 应用程序与 docker 一起使用时出错
Posted
技术标签:
【中文标题】将 MySQL 和 Spring Boot 应用程序与 docker 一起使用时出错【英文标题】:Erorr using MySQL and Spring boot app with docker 【发布时间】:2021-06-12 23:53:35 【问题描述】:我尝试将我的 Spring Boot 应用程序与 mysql Docker 容器连接起来。 我跑了:
docker run --name mysql-demo -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=test -e MYSQL_USER=sa -e MYSQL_PASSWORD=password -d mysql:lat
得到了
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8d540d1824b9 mysql:latest "docker-entrypoint.s…" 23 minutes ago Up 23 minutes 3306/tcp, 33060/tcp mysql-demo
在我的 spring 应用程序中,我有一个属性文件:
spring.datasource.url=jdbc:mysql://mysql-demo:3306/test
spring.datasource.username=sa
spring.datasource.password=password
spring.jpa.hibernate.ddl-auto=update
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5InnoDBDialect
当我尝试运行此应用或构建 jar 时,它会因此错误而崩溃
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
如果我在没有 docker 的情况下在本地使用 mysql 时应用程序正常
【问题讨论】:
【参考方案1】:您没有公开端口 3306。您必须使用 -p3306:3306 来做到这一点,否则您将无法访问此端口。
docker run -p3306:3306 --name mysql-demo -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=test -e MYSQL_USER=sa -e MYSQL_PASSWORD=password -d mysql:lat
【讨论】:
来自守护进程的错误响应:端口不可用:监听 tcp 0.0.0.0:3306:绑定:每个套接字地址(协议/网络地址/端口)通常只允许使用一次。我尝试使用其他端口 - docker run -p 3307:3306 --name mysql-demo -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=test -e MYSQL_USER=sa-e MYSQL_PASSWORD=password -d mysql:latest 仍然无法正常工作 那你必须停止你本地的Mysql或者使用另一个端口比如-p3307:3306【参考方案2】:我在同一个网络中运行了 2 个容器
更多信息在这里: how to access mysql docker container in spring boot docker container
【讨论】:
以上是关于将 MySQL 和 Spring Boot 应用程序与 docker 一起使用时出错的主要内容,如果未能解决你的问题,请参考以下文章
无法将docker Spring-Boot应用程序与docker-compose中的mysql容器和flyway连接起来
如何将 Spring Boot 应用程序与 MySQL 数据库连接?
Spring Boot:在Spring Boot中使用Mysql和JPA
无法将 mysql docker 容器与 Spring Boot 应用程序链接 - 通信链接失败