为什么我从Docker节点应用程序获取ECONNREFUSED连接到localhost MySQL?

我有一个本地运行的MySQL服务器..它不在一个容器内。 我的应用程序将打到RDS,所以没有意义走这条路线。 我的应用程序能够打RDS没有问题,作为一个testing。 但显然我想为本地发展打一些本地的东西。

从我的terminal,我可以做mysql --user=root --password=password mydb成功。

因为我没有得到一个超时错误,从我的容器我可以ping 127.0.0.1:3306没有问题。

我也使用控制台,看到我肯定传递正确的信息,更新从RDS的值到本地运行的MySQL。

Docker容器有自己的networkingIP地址,包括它自己的localhost 。 所以你基本上需要确定两件事情:

  1. 你的主机MySQL正在监听它的所有接口(my.cnf中的bind-addres = 0.0.0.0)。 用netstat -na|grep 3306检查。

  2. 找出您的容器可以到达的主机IP。 因此,检查容器的IP: docker inspect container-id ,findIP,并用.1replace最后一个部分,这应该是容器自身networking中主机的IP。 即172.17.0.1 (它可以被认为是固定的IP,对于开发环境是可以的)

所以最有可能的是这是你所需要的: 172.17.0.1:3306 : 172.17.0.1:3306