gpt4 book ai didi

mysql - "com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure"

转载 作者:行者123 更新时间:2023-11-30 21:44:04 25 4
gpt4 key购买 nike

我看到了很多关于这个问题的答案,今天我正在尝试解决我的问题。 (我已经花了 2 天多的时间,但仍然一无所知)。

这是我的情况:

  1. 它在我的 Mac 10.13.1 上

  2. MySQL 在一个 docker 容器中运行,我设置了所有这些权限。

  3. docker exec -it mysql bash ==> cd/etc => 我找到了一个 my.cnf 文件,我在其中添加了 bind-address=127.0.0.1

  4. 我有一个本地 MySQL Workbench,它能够连接到此 MySQL 服务器 127.0.0.1:3306 并从数据库中获取结果。

  5. 但是,当我的应用程序在第二个 Docker 容器中启动时,我无法使其连接到位于不同容器上的 MySQL 数据库。这是我在应用程序启动期间使用的命令的一部分:

    docker run -d ... -e DB_URL=jdbc:mysql://127.0.0.1:3306/mydatabase --name myApp  --restart=always --link mysql myApp_t:latest

但是一旦 myApp 启动,我可以从它的日志中找到消息:

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.8.0_111]
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[na:1.8.0_111]
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:1.8.0_111]
...

任何线索我可能还在做什么?

最佳答案

与 MySQL/JDBC 连接相比,这更像是一个 docker 问题。你的第二个 docker 容器无法到达你的第一个,因为那里的 127.0.0.1 指向容器本身,而不是第一个容器。

首先,您不应该将第一个容器中的bind_address 配置为127.0.0.1。您需要将其保留或将其设置为 0.0.0.0。您可能没有重新启动 MySQL,否则您也无法从自己机器上的 MySQL Workbench 进行连接。

通过 127.0.0.1 从您的机器连接到在 docker 中运行的应用程序的能力仅在您的机器上可用,在容器之间不可用。

您的命令行显示您已将 myApp 容器链接到 mysql 容器(使用 --link mysql)。这意味着您应该使用以下连接 URL:

jdbc:mysql://mysql:3306/mydatabase

即:将 127.0.0.1 替换为 mysql,因为它用作 mysql 容器的主机名以在这两个容器之间进行通信。

关于mysql - "com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50301361/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com