MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Kesalahan pemilihan server Docker dan mongo-go-driver

Ini karena hostname yang belum terselesaikan dari tuan rumah Docker. Di Docker, instance mongo1 , mongo2 , dan mongo3 dapat dijangkau dengan nama-nama itu. Namun, nama-nama ini tidak dapat dijangkau dari host Docker. Ini terbukti dengan baris ini:

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

Driver MongoDB akan mencoba server discovery dari anggota set replika yang diberikan; itu akan menemukan semua node lain dalam set replika (melalui rs.conf ). Masalahnya di sini adalah set replika diatur dengan nama mongo<N> , driver (dijalankan di Docker Host) tidak akan dapat menyelesaikan nama-nama ini. Anda dapat mengonfirmasi ini dengan mencoba melakukan ping ke mongo1 dari tuan rumah Docker.

Anda dapat mencoba menjalankan aplikasi dari instance Docker lain yang berbagi jaringan Docker yang sama dengan set replika. Atau, ubah jaringan Docker sedemikian rupa untuk mengizinkan nama host yang dapat dipecahkan.

PEMBARUAN:

Mengenai komentar Anda tentang mengapa menggunakan mongo shell, atau PyMongo bekerja.

Ini karena perbedaan mode koneksi. Saat menentukan satu simpul, yaitu mongodb://node1:27017 di shell atau PyMongo, penemuan server tidak dilakukan. Alih-alih, ia akan mencoba terhubung ke simpul tunggal itu (bukan sebagai bagian sebagai set replika). Tangkapannya adalah Anda harus terhubung ke simpul utama dari set replika untuk menulis (Anda harus tahu yang mana). Jika Anda ingin terhubung sebagai kumpulan replika, Anda harus menentukan nama kumpulan replika.

Berbeda dengan mongo-go-driver , secara default ia akan melakukan penemuan server dan mencoba menyambung sebagai kumpulan replika. Jika Anda ingin terhubung sebagai node tunggal, maka Anda perlu menentukan connect=direct dalam koneksi URI. Lihat juga Contoh Connect Direct




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Masukkan file json ke mongodb

  2. Bagaimana saya tahu ukuran dokumen saya di dalam MongoDB dengan driver ruby

  3. masukkan dalam subdokumen dengan mongoDB

  4. Perbarui nilai di MongoDB berdasarkan nilainya saat ini

  5. Memuat data awal saat startup aplikasi dengan Spring Data MongoDB