web-dev-qa-db-fra.com

Comment régler le volume de données de docker mongo

Je veux utiliser Dockerizing MongoDB et stocker des données dans un volume local.

Mais a échoué ...

Il a mongo: dernières images

kerydeMacBook-Pro:~ hu$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
mongo               latest              b11eedbc330f        2 weeks ago         317.4 MB
ubuntu              latest              6cc0fc2a5ee3        3 weeks ago         187.9 MB

Je veux stocker les données mono dans ~/data. alors ---

kerydeMacBook-Pro:~ hu$ docker run -p 27017:27017 -v ~/data:/data/db --name mongo -d mongo
f570073fa3104a54a54f39dbbd900a7c9f74938e2e0f3f731ec8a3140a418c43

Mais ... ça ne marche pas ...

docker ps - pas de démon mongo

kerydeMacBook-Pro:~ hu$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

essayer de courir "mongo" --failed

kerydeMacBook-Pro:~ hu$ docker exec -it f57 bash
Error response from daemon: Container f57 is not running

docker inspecter mongo

kerydeMacBook-Pro:~ hu$ docker inspect mongo
[
{
    "Id": "f570073fa3104a54a54f39dbbd900a7c9f74938e2e0f3f731ec8a3140a418c43",
    "Created": "2016-02-15T02:19:01.617824401Z",
    "Path": "/entrypoint.sh",
    "Args": [
        "mongod"
    ],
    "State": {
        "Status": "exited",
        "Running": false,
        "Paused": false,
        "Restarting": false,
        "OOMKilled": false,
        "Dead": false,
        "Pid": 0,
        "ExitCode": 100,
        "Error": "",
        "StartedAt": "2016-02-15T02:19:01.74102535Z",
        "FinishedAt": "2016-02-15T02:19:01.806376434Z"
    },




"Mounts": [
        {
            "Source": "/Users/hushuming/data",
            "Destination": "/data/db",
            "Mode": "",
            "RW": true
        },
        {
            "Name": "365e687c4e42a510878179962bea3c7699b020c575812c6af5a1718eeaf7b57a",
            "Source": "/mnt/sda1/var/lib/docker/volumes/365e687c4e42a510878179962bea3c7699b020c575812c6af5a1718eeaf7b57a/_data",
            "Destination": "/data/configdb",
            "Driver": "local",
            "Mode": "",
            "RW": true
        }
    ],

si je ne règle pas le volume des données, l'image mongo peut fonctionner!

Mais, lors du réglage du volume de données, ce n'est pas ... Qui peut m'aider?

33
Kery Hu

Essayez de vérifier journaux du menu fixe pour voir ce qui se passait lorsque le conteneur s’est arrêté et passez en mode "Existé".

Voir aussi si la spécification du chemin complet du volume aiderait:

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

Le PO ajoute:

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 

Une erreur: 13 c'est quoi numéro .

Ce commentaire ajoute:

Il s’agit d’un problème de propriété/autorisation de fichier (non lié à cette image de menu fixe), soit en utilisant boot2docker avec VB ou une boîte de dialogue vagabonde avec VB.

Néanmoins, j'ai réussi à pirater la propriété, en remontant le volume partagé/Users à l'intérieur de boot2docker vers l'uid 999 et le gid 999 (qui sont ce que mongo docker image utilise) et je l'ai commencé pour commencer:

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

Mais ... mongod se bloque parce que le type de système de fichiers n'est pas supporté (mmap ne fonctionne pas sur vboxsf)

La solution réelle serait donc d’essayer un DVC: conteneur de volumes de données, car pour le moment mongodb doc mentionne:

MongoDB nécessite un système de fichiers prenant en charge fsync() sur les répertoires.
Par exemple, les dossiers partagés de HGFS et de Virtual Box ne prennent pas en charge cette opération.

Alors:

le montage sur OSX ne fonctionnera pas pour MongoDB en raison de la manière dont fonctionnent les dossiers partagés de virtualbox.


Pour un DVC (Data Volume Container), essayez docker volume create :

docker volume create mongodbdata

Ensuite, utilisez-le comme:

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

Et voyez si ça marche mieux.

Comme je le mentionne dans les commentaires :

Un docker volume inspect mongodbdata (Voir docker volume inspect ) vous donnera son chemin (que vous pourrez ensuite sauvegarder si vous en avez besoin)

34
VonC

Via Docker Compose:

version: '2'
    services:
      mongodb:
        image: mongo:latest
        volumes:
          - ./<your-local-path>:/data/db

/data/db est l'emplacement des données enregistrées sur le conteneur.

<your-local-path> est l'emplacement sur votre ordinateur, AKA, l'ordinateur hôte, où les fichiers journaux de base de données seront enregistrés.

24
Richard

À partir de l'été 2017, un volume local n'est pas considéré comme la meilleure pratique.

Par Docker Docs :

Les volumes constituent le mécanisme privilégié pour la persistance des données générées par les conteneurs Docker et utilisées par ceux-ci.

docker volume create mongodbdata
docker run -p 27017:27017 -v mongodbdata:/data/db mongo
18
Joshua Cook