【问题标题】:Spring-boot failing to connect to mysql container even after supplying proper mysql service name即使提供正确的 mysql 服务名称,Spring-boot 也无法连接到 mysql 容器
【发布时间】:2020-10-21 17:11:42
【问题描述】:

这听起来可能是重复的问题,但事实并非如此,我觉得这是一个疯狂的错误,但是,让我快速解释一下我的设置:

一个简单的 Spring bootstrap 应用程序在我的本地和application.properites 文件中的 JDBC 连接字符串上运行良好,如下所示。

spring.datasource.url=jdbc:mysql://minesql:3306/datamachine?serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=****

docker 运行的实例有:

我将war文件复制(在docker cp命令的帮助下)到alpine(unix容器)并以交互模式运行以进行测试,它抛出异常,因为它无法ping通mysql服务器。我确信数据库配置很好,并且不知道为什么 springboot 应用程序无法连接到 mysql 容器实例。注意,mysql 容器确实有手动创建的“datamachine”数据库。

这是报告的错误:

请帮助我了解我在这里缺少什么或出了什么问题。

以防万一,如果您想知道我是如何启动这些容器的。

对于mysql:

docker run -d --name minesql -e MYSQL_ROOT_PASSWORD=**** -p 3306:3306 mysql 

从 alpine 容器运行 Java 应用程序,这就是我启动 alpine 的方式,

docker run -it --name unix alpine

交互模式显示bash 提示运行spring-boot 战争文件。 (..在 alpine 中安装 java 8 后运行 war 文件)

【问题讨论】:

  • 你是如何启动容器的?
  • @Wander3r 感谢您的阅读。请找到更新后的问题来回答您的具体问题。

标签: mysql spring-boot docker


【解决方案1】:

您有两个正在运行并通过默认桥接网络连接的 docker 容器。来自码头桥documentation

默认桥接网络上的容器只能通过以下方式相互访问 IP 地址,除非您使用 --link 选项,该选项被视为 遗产。在用户定义的桥接网络上,容器可以解析每个 其他名称或别名。

如果您需要第二个容器能够从内部解析名称 minesql,您需要创建一个用户定义的网桥并将 docker 容器容器连接到该网桥。

使用

创建一个新网络
docker network create my-net

并按照指定的here添加您的容器

其他替代方法是使用 docker-compose 并避免手动创建桥接网络以进行名称解析。对于生产环境,这将是理想的。

【讨论】:

    猜你喜欢
    • 2023-02-23
    • 1970-01-01
    • 2019-11-25
    • 2019-11-10
    • 2020-07-12
    • 2019-09-09
    • 2020-01-29
    • 1970-01-01
    • 2021-04-04
    相关资源
    最近更新 更多