2017-06-02 4 views
1

Ich habe einen lokal laufenden MySQL-Server .. es ist nicht in einem Container. Meine App wird RDS schlagen, also hat es keinen Sinn, diese Route zu gehen. Meine App konnte RDS problemlos als Test ausprobieren. Aber offensichtlich möchte ich etwas Lokales für die lokale Entwicklung treffen.Warum erhalte ich ECONNREFUSED, wenn ich von Docker-Knoten-App eine Verbindung zu Localhost-MySQL herstelle?

Von meinem Terminal kann ich mysql --user=root --password=password mydb erfolgreich tun.

Und da ich keinen Timeout-Fehler bekomme, kann ich aus meinem Container ping 127.0.0.1:3306 ohne Problem.

Ich habe auch Konsole verwendet, um zu sehen, dass ich definitiv die richtigen Informationen übergebe, nachdem ich die Werte von RDS auf lokal laufendes MySQL aktualisiert habe.

+0

Sie nicht verwenden Im Allgemeinen 'ping' mit einem bestimmt Port als "Ping" wird ICMP-Pakete verwenden. Haben Sie stattdessen verifiziert, dass der mysql-Server die beabsichtigte Adresse und den Port unter Verwendung von etwas wie "netstat -nlp" abhört? – mscdex

+0

Wenn der mysql-Server auf einem UNIX-Socket wartet, können Sie stattdessen auch eine Verbindung zu diesem Knoten herstellen. Verwenden Sie dazu die Konfigurationsoption 'socketPath' connection mit den Modulen' mysql' oder 'mysql2'. – mscdex

+0

@mscdex In Bezug auf Netstat, gibt es einen Grund, dass ich 3306 Pop-up sehen würde, wenn meine App nicht versucht, eine offene Verbindung zu halten? Sicher nicht dort jetzt aufgeführt und ich glaube nicht, dass ich es erwarten würde. –

Antwort

2

Docker Container hat seine eigenen Netzwerk-IPs, einschließlich seiner eigenen localhost. Sie müssen also im Grunde sicher zwei Dinge sein:

  1. , dass Ihr Gastgeber MySQL ist in all seinen Schnittstellen (bind-addres = 0.0.0.0 in my.cnf) zu hören. Überprüfen Sie mit netstat -na|grep 3306.

  2. Ermitteln Sie die Host-IP, die Ihr Container erreichen kann. Überprüfen Sie also die IP des Containers: docker inspect container-id, finden Sie die IP, und ersetzen Sie den letzten Teil mit .1, die die IP Ihres Hosts im Container eigenen Netzwerk sein sollte. I.e. 172.17.0.1 (es kann als festen IP in Betracht gezogen werden, für die Entwickler-Umgebung ist es ok)

So sehr wahrscheinlich, dass das ist, was Sie brauchen: 172.17.0.1:3306

+0

Meine war 18 statt 17, aber keine Würfel. –

Verwandte Themen