MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

So stellen Sie das Docker-Mongo-Datenvolumen ein

Versuchen Sie, die Docker-Protokolle zu überprüfen, um zu sehen, was vor sich ging, als der Container gestoppt wurde, und gehen Sie in den Modus „Existed“.

Siehe auch, ob es hilfreich wäre, den vollständigen Pfad für das Volume anzugeben:

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

Das OP fügt hinzu:

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 

Eine errno:13 ist das, worum es in Ausgabe 30 geht.

Dieser Kommentar fügt hinzu:

Es handelt sich um ein Dateieigentums-/Berechtigungsproblem (nicht im Zusammenhang mit diesem Docker-Image), entweder bei Verwendung von boot2docker mit VB oder einer Vagrant-Box mit VB.

Trotzdem gelang es mir, den Besitz zu hacken, indem ich das freigegebene Volume /Users in boot2docker auf uid 999 und gid 999 (die das Mongo-Docker-Image verwendet) neu einbindet und zum Starten gebracht:

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

Aber... mongod stürzt ab, weil der Dateisystemtyp nicht unterstützt wird (mmap funktioniert nicht auf vboxsf)

Die eigentliche Lösung wäre also, einen DVC:Data Volume Container auszuprobieren , denn im Moment erwähnt das Mongodb-Dokument:

MongoDB erfordert ein Dateisystem, das fsync() unterstützt in Verzeichnissen.
Zum Beispiel unterstützen die freigegebenen Ordner von HGFS und Virtual Box diesen Vorgang nicht.

Also:

Das Mounten in OSX funktioniert für MongoDB aufgrund der Funktionsweise von Virtualbox-Freigabeordnern nicht.

Versuchen Sie für einen DVC (Data Volume Container) docker volume create :

docker volume create mongodbdata

Verwenden Sie es dann als:

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

Und sehen Sie, ob das besser funktioniert.

Wie ich in den Kommentaren erwähne:

Ein docker volume inspect mongodbdata (siehe docker volume inspect ) gibt Ihnen den Pfad an (den Sie dann bei Bedarf sichern können)