sql >> Database teknologi >  >> NoSQL >> MongoDB

Docker og mongo-go-driver servervalgsfejl

Dette skyldes uløst hostname fra Docker-vært. I Docker, forekomsterne mongo1 , mongo2 og mongo3 kan nås under disse navne. Disse navne er dog ikke tilgængelige fra Docker-værten. Dette fremgår af denne linje:

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

MongoDB-driver vil forsøge server discovery fra givet et replika sæt medlem(mer); den vil finde alle andre noder i replikasættet (via rs.conf ). Problemet her er, at replikasættet er sat med navnet mongo<N> , ville driveren (kørt i Docker-vært) ikke være i stand til at løse disse navne. Du kan bekræfte dette ved at prøve at pinge mongo1 fra Docker-vært.

Du kan enten prøve at køre programmet fra en anden Docker-instans, der deler det samme Docker-netværk som replikasættet. Eller modificer Docker-netværket som sådan for at tillade opløselige værtsnavne.

OPDATERING:

Med hensyn til din kommentar til, hvorfor du bruger mongo shell, eller PyMongo arbejder.

Dette skyldes forskellen i forbindelsestilstand. Når du angiver en enkelt node, dvs. mongodb://node1:27017 i shell eller PyMongo, bliver der ikke lavet serveropdagelse. I stedet vil den forsøge at oprette forbindelse til den enkelte node (ikke som en del af et replikasæt). Fangsten er, at du skal oprette forbindelse til replikasættets primære node for at skrive (du skal vide hvilken). Hvis du gerne vil oprette forbindelse som et replikasæt, skal du definere replikasættets navn.

I modsætning til mongo-go-driver , vil den som standard udføre serveropdagelse og forsøge at oprette forbindelse som et replikasæt. Hvis du gerne vil forbinde som en enkelt node, skal du angive connect=direct i forbindelses-URI. Se også Eksempel på direkte forbindelse




  1. Sorter vare efter værdi mongodb

  2. Mongoose omdøbe samling

  3. MongoDB ReplicaSet - PRIMÆR rolle falder til SEKUNDÆR, når kun PRIMÆR er tilbage

  4. Hvordan opdaterer man værdien af ​​et specifikt indlejret dokument i et array af et specifikt dokument i MongoDB?