2017-06-02 70 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,但沒有骰子。 –

相關問題