java - 无法从 Spring Boot Docker 容器连接 mysql Docker 容器
问题描述
我收到以下错误
2020-12-26 23:17:30.499 INFO 1 --- [main] org.hibernate.dialect.Dialect:HHH000400:使用方言:org.hibernate.dialect.MySQL57Dialect licenseservice_1 | 休眠:如果存在许可许可服务_1,则删除表 | 2020-12-26 23:17:31.006 INFO 1 --- [main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - 开始...许可服务_1 | 2020-12-26 23:17:32.010 错误 1 --- [main] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - 池初始化期间出现异常。许可服务_1 | 许可服务_1 | com.mysql.cj.jdbc.exceptions.CommunicationsException:通信链路故障许可service_1 | 许可服务_1 | 最后一个成功发送到服务器的数据包是 0 毫秒前。驱动程序没有收到来自服务器的任何数据包。许可服务_1 | 在 com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:174) ~[mysql-connector-java-8.0.22.jar:8.0.22] licenseservice_1 | 在 com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64) ~[mysql-connector-java-8.0.22.jar:8.0.22]
我的 docker-compose yml
version : '3'
services:
licensingservice:
image: licensing/licensing-service-ms:0.0.1-SNAPSHOT
ports:
- "8080:8080"
networks:
- my-network
volumes:
- .:/vol/development
depends_on:
- mysqldbserver
mysqldbserver:
image: mysql:5.7
ports:
- "3307:3306"
networks:
- my-network
environment:
MYSQL_DATABASE: license
MYSQL_ROOT_PASSWORD: Spartans@123
container_name: mysqldb
networks:
my-network:
driver: bridge
和我的 application.properties
spring.jpa.hibernate.ddl-auto=create-drop
spring.datasource.url=jdbc:mysql://mysqldb:3307/license
spring.datasource.username=root
spring.datasource.password=Spartans@123
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL57Dialect
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.show-sql=true
解决方案
尝试连接到端口 3306。您将数据库容器上的端口 3306 暴露给端口 3307 上的主机,但这不会改变同一网络内服务之间的通信。
这在Docker-Compose 文档中进行了解释。
默认情况下,Compose 会为您的应用程序设置一个网络。服务的每个容器都加入默认网络,并且可以被该网络上的其他容器访问,并且可以通过与容器名称相同的主机名被它们发现。
此外,您可以通过定义主机端口和容器端口之间的映射来选择将这些端口公开给外界。但是,这对同一网络内的服务之间的通信没有影响:
注意 HOST_PORT 和 CONTAINER_PORT 之间的区别很重要。[...] 网络服务到服务通信使用 CONTAINER_PORT。当 HOST_PORT 被定义时,服务也可以在 swarm 之外访问。
推荐阅读
- xml - 将 Muenchian 分组应用于 XSLT
- linux - 在带有 docker swarm 的 unfs3 中使用 mount 命令时出现问题
- c# - OpenCvSharp 内存泄漏
- react-native - 如何使用 xcode 模拟器缩小 react-native-maps?
- ios - Swift - 将 UIImage 转换为 jpegData - [Metal] 9072 x 12198 iosurface 对于 GPU 来说太大了
- android - Android:在 API 23 之前获取任务的最高活动
- excel - 过滤包含日期范围的行以仅显示特定日期在该范围内的行
- firebase - 如何解决“错误:未为类“对象”定义运算符“[]”?
- java - 有人可以帮助我警告资源未能调用关闭
- python - 用 url、headers 和 body 发布数百万个请求最快的是什么?