Docker-Mongodb - Herstellen einer Verbindung zum Mongo-Image in Windows 10 local

2526
Sun

Ich versuche, eine Verbindung zum Docker-Mongo-Image in meiner lokalen Windows-Maschine herzustellen, ich habe mongodb in local installiert und den mongodb-bin-Pfad der Windows-Pfadumgebungsvariablen hinzugefügt. Und ich mache unten Schritte

cd <docker-location>  docker login  docker ps 

- um zu überprüfen, ob bereits Mongo läuft

docker pull myrepo/mymongo-image:1.0 docker run -p 27017:27017 -d --net=host --name=mytestDB myrepo/mymongo-image:1.0  docker logs mytestDB  

Ausgabe: MongoDB-Start: pid = 6 Port = 27017 dbpath = / data / db 64-Bit-Host = Mobiles Docker ps Ausgabe:

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 34598734598 myrepo/mymongo-image:1.0 "/bin/sh -c /usr/bin/" 12 hours ago Up About a minute mytestDB 

mongo in lokal starten:

mongo --port 27017 

Aber ich bekomme Fehler wie folgt:

MongoDB shell version: 3.2.1 connecting to: 127.0.0.1:27017/test 2016-10-13T20:04:12.273+0530 W NETWORK [thread1] Failed to connect to 127.0.0.1:27017, reason: errno:10061 No connection could be made because the target machine actively refused it. 2016-10-13T20:04:12.277+0530 E QUERY [thread1] Error: couldn't connect to server 127.0.0.1:27017, connection attempt failed : connect@src/mongo/shell/mongo.js:226:14 @(connect):1:6  exception: connect failed 

Bitte lassen Sie mich wissen, wo ich mich geirrt habe.

1

1 Antwort auf die Frage

2
programmerq

Nicht verwenden --net=host. Es sieht so aus, als würden Sie Docker bitten, den Port zu veröffentlichen, seitdem Sie die -p 27017:27017Option bereitgestellt haben. Andernfalls --net=hostfordert Docker jedoch auf, alle Netzwerkisolationsfunktionen zu deaktivieren, einschließlich der Port-Veröffentlichung.

Docker-for-Windows richtet in Hyperv eine kleine VM ein, auf der Docker ausgeführt wird. Ihr --net=hostContainer hört auf die Schnittstellen dieser VM zu. Die Docker-for-Windows-Netzwerkportweiterleitung berücksichtigt nur die veröffentlichten Ports. Daher findet keine Weiterleitung statt.

Wenn Sie denselben Befehl ohne ausführen, --net=hostsollten Sie ein anderes Ergebnis erhalten.

Wenn Sie versuchen, einen containerisierten Prozess auszuführen und der veröffentlichte Port scheinbar nicht funktioniert, liegt dies möglicherweise daran, dass der Prozess die lo0Schnittstelle des Containers überwacht und nicht die eth0Schnittstelle.

Hier ist ein guter Benchmark-Testcontainer zum Testen von Veröffentlichungsports:

docker run --name testweb -d -p 8989:80 nginx:alpine 

Sie sollten dann in der Lage sein, eine Verbindung zu http://127.0.0.1:8989 herzustellen und eine Nginx-Begrüßungsseite anzuzeigen.