MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Błąd wyboru serwera Docker i mongo-go-driver

Wynika to z nierozwiązanej hostname z hosta platformy Docker. W Dockerze instancje mongo1 , mongo2 i mongo3 są osiągalne pod tymi nazwami. Jednak te nazwy nie są osiągalne z hosta platformy Docker. Widać to po tym wierszu:

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

Sterownik MongoDB podejmie próbę server discovery z danego elementu(ów) zestawu replik; znajdzie wszystkie inne węzły w zestawie replik (poprzez rs.conf ). Problem polega na tym, że zestaw replik jest ustawiony na nazwę mongo<N> , sterownik (uruchomiony na hoście platformy Docker) nie będzie w stanie rozpoznać tych nazw. Możesz to potwierdzić, próbując pingować mongo1 z hosta platformy Docker.

Możesz spróbować uruchomić aplikację z innej instancji platformy Docker współdzielącej tę samą sieć platformy Docker co zestaw replik. Lub zmodyfikuj sieć platformy Docker jako taką, aby zezwolić na rozpoznawalne nazwy hostów.

AKTUALIZACJA:

Jeśli chodzi o Twój komentarz, dlaczego używasz mongo powłoka lub PyMongo Pracuje.

Wynika to z różnicy w trybie połączenia. Podczas określania pojedynczego węzła, tj. mongodb://node1:27017 w powłoce lub PyMongo nie dokonuje się wykrywania serwerów. Zamiast tego spróbuje połączyć się z tym pojedynczym węzłem (nie jako część zestawu replik). Połów polega na tym, że musisz połączyć się z podstawowym węzłem zestawu replik, aby pisać (musisz wiedzieć, który z nich). Jeśli chcesz połączyć się jako zestaw replik, musisz zdefiniować nazwę zestawu replik.

W przeciwieństwie do mongo-go-driver , domyślnie przeprowadza wykrywanie serwera i próbuje połączyć się jako zestaw replik. Jeśli chcesz połączyć się jako pojedynczy węzeł, musisz określić connect=direct w identyfikatorze URI połączenia. Zobacz też Przykład Connect Direct




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Zaktualizuj rolę użytkownik:brak uprawnień administratora do wykonania polecenia

  2. Znajdź dokumenty z tablicą, która nie zawiera określonej wartości

  3. Nie można połączyć się z mongoDB uruchomioną w kontenerze docker

  4. Czy można używać identyfikatora obiektu Mongo jako unikalnego identyfikatora? Jeśli tak, jak mogę przekonwertować go na ciąg i wyszukać go według ciągu?

  5. Wyrażenie regularne MongoDB z polem indeksowanym