我现在正在try 一些新东西,我想创建一个小型Spring/mySQL应用程序.我设置了一个docker-compose文件,如下所示:

version: '3.3'
services:
  docker-mysql:
    container_name: docker-mysql
    image: mysql:5.7
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=root
    volumes:
      - db_data:/var/lib/mysql
      - ./initalize.sql:/docker-entrypoint-initdb.d/initalize.sql:ro
    ports:
      - 3306:3306
    expose:
      - 3306
volumes:
  db_data: {}

在initalize.SQL中,我建立了一个包含一些测试表的基本Test数据库,并填写了其中的一些,它工作得很好,我可以通过命令行查询元素.

另一方面,我无法通过Spring连接到它,我有以下application.properties文件:

spring.jpa.hibernate.ddl-auto=none
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect
spring.datasource.url=jdbc:mysql://localhost:3306/TEST?useSSL=false
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

每次我try 启动应用程序时,它都会得到com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure error, and it can't find the server.(我没有在docker镜像中运行该应用程序,它在Windows上运行)

我还try 连接将收件箱url更改为jdbc:mysql://docker-mysql:3306/TEST?useSSL=false,但也不起作用.

推荐答案

只有当您允许访问要路由到mariadb容器的主机:端口时,您打算做的事情才有效.您不仅必须公开该端口,还必须将其放置在主机网络上.看到https://docs.docker.com/network/drivers/host/ 请注意,在此设置中,您仍然无法访问本地主机:port,而只能访问主机名:port.

另一种可能性是将您的客户端应用程序放置到同一网络上的另一个docker容器中.看到https://docs.docker.com/network/

Java相关问答推荐

LocalTime解析截断时间的第二个值

Spring Jpa findById会导致StackOverFlow错误,但其他查询没有问题

在FML中删除关键帧动画

当一个链表中间有一个循环时,它的松散部分会发生什么?

JPackaged应用程序启动MSI调试,然后启动System. exit()

将成为一个比较者.比较…在现代Java中,编译器会对`CompareTo`方法进行优化吗?

将不受支持的时区UT重写为UTC是否节省?

更新GWT 2.5.1到2.11.0和sencha GXT 3.1.1到4.1时出现错误

将带有js文件的 bootstrap 程序导入maven项目时出错

Java流传输一个列表并创建单个对象

使SLF4J在Android中登录到Logcat,在测试中登录到控制台(Gradle依赖问题)

try 从REST API返回对象列表时出错

使用Class.this.field=Value初始化构造函数中的最后一个字段会产生错误,而使用this.field=Value则不会

EXCEL中的公式单元格显示#NAME?

Spring Validator批注不起作用

在单例类上获取Java锁,了解原因

Bash数组的单引号元素并使用空格连接

基于距离的APACHE POI公式判断

spring 更新多项管理关系

由于版本不匹配,从Java 8迁移到Java 17和Spring 6 JUnit4失败