对于这个问题,我已经看到了许多答案,今天我正在努力解决我的问题我已经花了2天多的时间在这上面了,但仍然不知所措)。
我的情况是:
它在我的mac 10.13.1上
mysql使用一个docker容器运行,我设置了所有这些特权。 docker exec -it mysql bash
==> cd /etc
=>我找到了一个 my.cnf
文件,我在其中添加了 bind-address=127.0.0.1
我有一个本地mysql工作台,可以连接到这个mysql服务器, 127.0.0.1:3306
并从数据库中获取结果。
但是,当我的应用程序在第二个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]
...
有什么线索吗?我还能做什么?
1条答案
按热度按时间68bkxrlz1#
这与其说是mysql/jdbc连接,不如说是docker的问题。第二个docker容器无法到达第一个容器,因为那里的127.0.0.1指向容器本身,而不是第一个容器。
首先,您不应该配置
bind_address
在第一个容器中127.0.0.1
. 你要么把它忘了,要么把它设成0.0.0.0
. 您可能没有重新启动mysql,否则您也无法在自己的机器上从mysql工作台进行连接。通过网络连接的能力
127.0.0.1
从您的计算机到在docker中运行的应用程序只能在您的计算机上使用,不能在容器之间使用。命令行显示链接的
myApp
容器到mysql
容器(使用--link mysql
). 这意味着作为连接url,您应该使用:即:替换
127.0.0.1
与mysql
作为mysql容器的主机名,在这两个容器之间进行通信。