2017-05-02 2 views
1

verbinden zwei Docker-Container zu arbeiten I MongoDB in einem Container ausgeführt werden soll, dies funktioniert:‚--link‘ scheint nicht

docker run -p 27017:27017 --name cdt -d mongo 

dann möchte ich einen Server in einem anderen Container laufen, wie so:

docker run --name foo --link cdt:mongo exec /bin/bash -c "node server.js" 

Der node.js Server versucht, eine Verbindung zu mongodb localhost:27017 zu machen, aber es funktioniert nicht, um die Verbindung herzustellen.

Wer weiß, warum das passieren könnte? Verbinde ich die Container nicht korrekt?

Beachten Sie, dass ich eine Verbindung mit dem Mongodb-Container von außerhalb eines Containers erfolgreich herstellen kann, aber nicht von dem Server innerhalb des Containers "foo".

Antwort

5

Also localhost aus einem Container ist immer (99,5% der Zeit) auf den Container selbst beziehen. Dies ist auch 99,5% der Zeit nicht das, was Sie wollen. Wenn Sie links so verwenden, müssen Sie localhost:27017 zu mongo:27017 ändern, da Sie den Link als (--link cdt:mongo) 'mounten'.

Eine bessere Option ist die Verwendung von Docker-Netzwerken anstelle von Links (die veraltet sind). Also:

$ docker network create my-net 
$ docker run --name cdt --net my-net -d mongo 
$ docker run --name foo --net my-net exec /bin/bash -c "node server.js" 

Jetzt würden Sie auf Ihre db über cdt:27017 beziehen sich die Namen der Container über DNS auf demselben Netzwerk auflösbar werden. Beachten Sie, dass Sie keinen Port verfügbar machen müssen, wenn Sie keine Verbindung von der Außenwelt herstellen möchten. Für die Interkonnektivität zwischen Containern im selben Netzwerk ist keine Port-Zuordnung erforderlich.

+0

danke !! wäre es cdt: 27017 oder mein-net: 27017? Warum sollte es cdt: 27017 sein? –

+1

'cdt', da es der Name des Containers ist (' --name cdt'). Dieser Name wird zur DNS-Suche hinzugefügt. Sie können auch weitere auflösbare Namen hinzufügen, indem Sie Aliase ('--alias') hinzufügen. 'my-net' ist nur der Name des Netzwerks, an das Sie die Container anhängen. – johnharris85

+0

habe es, danke, ich wünschte, es wäre der Name des Netzwerkes (da das ist geteilt) anstelle des Namens von mongodb Container, aber ich werde leben –