2017-06-02 50 views
1

我有一个本地运行的MySQL服务器..它不在一个容器内。我的应用程序将打到RDS,所以没有意义走这条路线。作为测试,我的应用程序能够达到RDS没有问题。但显然我想为本地发展创造一些本地的东西。为什么我从Docker节点应用程序获取ECONNREFUSED连接到localhost MySQL?

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

而且我没有收到超时错误,从我的容器我可以ping 127.0.0.1:3306没有问题。

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

+0

一般来说,你不使用'ping'在指定的端口因为'ping'将使用ICMP数据包。你有没有证实,MySQL服务器正在使用类似'netstat -nlp'的方式监听预期的地址和端口? – mscdex

+0

或者,如果mysql服务器正在侦听UNIX套接字,则可以使用'mysql'或'mysql2'模块的'socketPath'连接配置选项,而不是从节点连接到该套接字。 – mscdex

+0

@mscdex就netstat而言,如果我的应用程序没有试图保持打开的连接,是否有我会看到3306弹出的原因?当然,现在没有在那里列出,我不认为我会期待它。 –

回答

2

码头集装箱有自己的网络IP,包括它自己的localhost。所以,你基本上需要的两件事情是肯定的:

  1. 您的主机的MySQL在所有接口(绑定-ADDRES = 0.0.0.0在my.cnf)的监听。请与netstat -na|grep 3306联系。

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

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

+0

我的是18,而不是17,但没有骰子。 –

相关问题