无法从Spring Boot容器连接MySQL Docker容器

3
我遇到了下列错误:
2020-12-26 23:17:30.499 INFO 1 --- [ main] org.hibernate.dialect.Dialect : HHH000400: 使用方言:org.hibernate.dialect.MySQL57Dialect licensingservice_1 | Hibernate: 删除表如果存在 licenses licensingservice_1 | 2020-12-26 23:17:31.006 INFO 1 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - 启动中... licensingservice_1 | 2020-12-26 23:17:32.010 ERROR 1 --- [ main] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - 连接池初始化过程中出现异常。 licensingservice_1 | licensingservice_1 | com.mysql.cj.jdbc.exceptions.CommunicationsException: 通信链路失败 licensingservice_1 | licensingservice_1 | 最后一个成功发送到服务器的数据包是 0 毫秒前发送的。驱动程序没有从服务器接收到任何数据包。 licensingservice_1 | at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:174) ~[mysql-connector-java-8.0.22.jar:8.0.22] licensingservice_1 | at 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
1个回答

1
尝试连接到3306端口。您将数据库容器上的3306端口暴露给主机机器的3307端口,但这对于同一网络内服务之间的通信没有任何影响。这在Docker-Compose文档中有解释。
默认情况下,Compose为应用程序设置单个网络。每个服务的容器都加入了默认网络,并可由该网络上的其他容器访问,并在与容器名称相同的主机名下被发现。
此外,您可以选择通过定义主机端口和容器端口之间的映射来将这些端口暴露给外部世界。但是,这对于同一网络内的服务之间的通信没有影响:
重要的是要注意HOST_PORT和CONTAINER_PORT之间的区别。[...] 网络化的服务到服务通信使用CONTAINER_PORT。当定义HOST_PORT时,该服务也可以在集群外部访问。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接