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?
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)
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.
À 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