【问题标题】:unable to connect MYSQL docker container from spring boot app无法从 Spring Boot 应用程序连接 MYSQL docker 容器
【发布时间】:2021-04-22 14:53:24
【问题描述】:

我有 MYSQL 容器正在运行,我能够执行它并能够使用“mysql -h 172.17.0.2 -u root -p”从主机连接。我已经执行了“docker run --name=mysql-host -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7.32”来运行docker镜像。

但是当我尝试通过 Spring Boot 应用程序访问时,下面给出的连接被拒绝是 application.properties 中的属性

spring.datasource.url=jdbc:mysql://172.17.0.2:3306/auditLog?createDatabaseIfNotExist=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC&useSSL=false
spring.datasource.username=root
spring.datasource.password=root

我正在运行我的罐子,如下所示

java -jar service-1.0.0.jar spring.config.location=file:///home/10662598/Downloads/entity-search-service-deploymentFolder/entity-search-service/configs/application.properties

错误获取原因:java.net.ConnectException:连接被拒绝(连接被拒绝)

【问题讨论】:

  • 您的 Spring Boot 应用程序在哪里运行?在主机上或在 mysql docker 容器内或在单独的 docker 容器内。
  • 在我的本地机器上,它没有被 dockerized。执行上面的命令来运行它。

标签: mysql spring-boot docker


【解决方案1】:

有点晚了,但我认为您需要将本地计算机上的端口 3306 转发到包含端口 3306 试试这个

docker run --name=mysql-host -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7.32

【讨论】:

    【解决方案2】:

    您的问题可能是因为Spring boot应用无法访问数据库(mysql),可能是因为它们不在同一个网络中。

    如果你的 Spring boot 应用在容器内运行

    根据您的问题,我看到您正在使用 docker run... 运行容器,因此当您使用该命令启动 MySQL 和 Spring Boot 应用程序时,它们不在同一个网络中。

    解决方案是,首先创建一个网络,然后启动 MySQL 和 Spring 应用程序以在该网络中运行:

    docker network create my-net
    

    然后像往常一样启动您的容器,但记得将您的容器添加到您刚刚创建的网络中:

    docker run ... --network my-net
    

    现在您的容器在同一个网络中并且应该可以相互访问,您可以通过 exec 到 Spring boot 应用程序来验证这一点,并使用其容器名称(和端口)尝试 curl 到 Mysql 容器:

    curl <mysql_container_name>:3306
    

    如果 Spring boot 应用程序正在主机上运行

    然后只需确保将 Mysql 端口映射到主机并使用 localhost:&lt;mapped_port&gt; 进行连接

    祝你好运:)

    【讨论】:

      猜你喜欢
      • 2021-04-04
      • 2015-11-19
      • 2018-09-26
      • 2019-10-19
      • 2021-08-02
      • 1970-01-01
      • 2016-02-19
      • 2020-12-23
      • 2020-01-29
      相关资源
      最近更新 更多