Ich möchte also eine Verbindung zu meinem Mongodb herstellen, der auf meinem Host-Computer (DO-Droplet, Ubuntu 16.04) läuft. Es wird auf dem Standardport 27017
auf localhost ausgeführt.
Ich verwende dann mup , um meine Meteor-App auf meinem DO-Droplet bereitzustellen, das Docker verwendet, um meine Meteor-App in einem Container auszuführen. So weit so gut. Eine Standard-mongodb://...
-Verbindungs-URL wird verwendet, um die App mit dem mongodb. Zu verbinden. Jetzt habe ich folgendes Problem:
mongodb://[email protected]:27017...
funktioniert offensichtlich nicht innerhalb des Docker-Containers, da localhost
nicht der localhost des Hosts ist.
Ich habe bereits viele Stackoverflow-Beiträge dazu gelesen, die ich bereits ausprobiert habe:
--network="Host"
- hat nicht funktioniert, da 0.0.0.0:80
bereits verwendet wird oder so ähnlich (nginx-Proxy)--add-Host="local:<MY-DROPLET-INTERNET-IP>"
und Verbindung über mongodb://[email protected]:27017...
: funktioniert auch nicht, da ich nur von localhost auf meine mongodb zugreifen kann, nicht von der öffentlichen IPDas muss ein allgemeines Problem sein!
tl; dr - Wie kann ich die Hosts localhost
in einem Docker-Container offenlegen, damit ich eine Verbindung zu den auf dem Host laufenden Diensten herstellen kann? (einschließlich ihrer Ports, z. B. 27017).
Ich hoffe jemand kann helfen!
Sie können Folgendes verwenden: 172.17.0.1
, da dies die Standard-Host-IP ist, die die Container sehen können. Sie müssen jedoch Mongo so konfigurieren, dass 0.0.0.0
gehört wird.
Ab Docker 18.03 die Empfehlung soll eine Verbindung zum speziellen DNS-Namen Host.docker.internal
hergestellt werden
Für frühere Versionen können Sie die DNS-Namen docker.for.mac.localhost
oder docker.for.windows.localhost
verwenden.
Ändern Sie in /etc/mongod.conf das bindIp von 127.0.0.1 auf 0.0.0.0. Dann wird es klappen