sql >> Database >  >> NoSQL >> MongoDB

Selectiefout Docker en mongo-go-driver-server

Dit komt door een onopgeloste hostname van Docker-host. In Docker zijn de instanties mongo1 , mongo2 , en mongo3 zijn bereikbaar onder die namen. Deze namen zijn echter niet bereikbaar vanaf de Docker-host. Dit wordt duidelijk door deze regel:

Addr: mongo2:27017, Type: Unknown, State: Connected, Average RTT: 0, Last error: dial tcp: lookup mongo2: no such host

MongoDB-stuurprogramma probeert server discovery van een replicasetlid (en); het zal alle andere knooppunten binnen de replicaset vinden (via rs.conf ). Het probleem hier is dat de replicaset is ingesteld met de naam mongo<N> , zou het stuurprogramma (uitgevoerd in Docker-host) deze namen niet kunnen oplossen. Je kunt dit bevestigen door te proberen mongo1 . te pingen van Docker-host.

U kunt proberen de toepassing uit te voeren vanaf een andere Docker-instantie die hetzelfde Docker-netwerk deelt als de replicaset. Of pas het Docker-netwerk als zodanig aan om oplosbare hostnamen toe te staan.

BIJWERKEN:

Wat betreft uw opmerking over het gebruik van mongo shell, of PyMongo werken.

Dit komt door het verschil in verbindingsmodus. Bij het specificeren van een enkele node, bijv. mongodb://node1:27017 in shell of PyMongo wordt geen serverdetectie uitgevoerd. In plaats daarvan zal het proberen verbinding te maken met dat ene knooppunt (niet als onderdeel van een replicaset). De vangst is dat je verbinding moet maken met het primaire knooppunt van de replicaset om te schrijven (je moet weten welke). Als u verbinding wilt maken als replicaset, moet u de naam van de replicaset definiëren.

In tegenstelling tot de mongo-go-driver , zou het standaard serverdetectie uitvoeren en proberen verbinding te maken als een replicaset. Als u verbinding wilt maken als een enkel knooppunt, moet u connect=direct . specificeren in de verbindings-URI. Zie ook Example Connect Direct




  1. Mongoose - RangeError:maximale call-stackgrootte overschreden

  2. Opnieuw verbinden ECONNREFUSED 127.0.0.1:6379

  3. Hoe het ISO-datumformaat terug te geven in PHP voor MongoDB?

  4. Een verzameling met mongodb-caps maken met c# api