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

Come impostare il volume di dati di Docker Mongo

Prova a controllare i log della finestra mobile per vedere cosa stava succedendo quando il contenitore si è fermato e passa alla modalità "Esistito".

Vedi anche se sarebbe utile specificare il percorso completo per il volume:

docker run -p 27017:27017 -v /home/<user>/data:/data/db  ...

L'OP aggiunge:

docker logs mongo 
exception in initAndListen: 98 
Unable to create/open lock file: /data/db/mongod.lock 
errno:13 Permission denied 
Is a mongod instance already running?
terminating 2016-02-15T06:19:17.638+0000 
I CONTROL [initandlisten] dbexit: rc: 100 

Un errno:13 è ciò di cui tratta il numero 30.

Questo commento aggiunge:

È un problema di proprietà/autorizzazione del file (non correlato a questa immagine della finestra mobile), utilizzando boot2docker con VB o una casella vagabondo con VB.

Tuttavia, sono riuscito ad hackerare la proprietà, rimontando il volume condiviso /Users all'interno di boot2docker su uid 999 e gid 999 (che sono ciò che usa l'immagine della finestra mobile mongo) e l'ho fatto iniziare:

$ boot2docker ssh
$ sudo umount /Users
$ sudo mount -t vboxsf -o uid=999,gid=999 Users /Users

Ma... mongod si arresta in modo anomalo a causa del tipo di filesystem non supportato (mmap non funziona su vboxsf)

Quindi la vera soluzione sarebbe provare un DVC:Data Volume Container , perché in questo momento il documento mongodb menziona:

MongoDB richiede un filesystem che supporti fsync() nelle directory.
Ad esempio, le cartelle condivise di HGFS e Virtual Box non supportano questa operazione.

Quindi:

il montaggio su OSX non funzionerà per MongoDB a causa del modo in cui funzionano le cartelle condivise di virtualbox.

Per un DVC (Data Volume Container), prova docker volume create :

docker volume create mongodbdata

Quindi usalo come:

docker run -p 27017:27017 -v mongodbdata:/data/db  ...    

E vedi se funziona meglio.

Come ho detto nei commenti:

Un docker volume inspect mongodbdata (vedi docker volume inspect ) ti darà il suo percorso (di cui potrai poi fare il backup se necessario)