24
votes

Impossible de démarrer l'image docker mongo sous Windows

Au démarrage de l'image, j'obtiens l'erreur suivante:

services:
  my-mongo-db:
  build: ./database
  ports:
   - 32815:27017
  volumes:
- ./database/db:/data/db

La valeur du dossier .env est

FROM mongo:latest
VOLUME ["/data/db"]
WORKDIR /data
EXPOSE 27017
CMD ["mongod"]

Le fichier docker DB:

MONGO_SAVE_PATH=./database/db

Le conteneur de base de données docker-compose.yml

 2019-02-27T17:09:41.095+0000 E STORAGE  [initandlisten] WiredTiger error (17) [1551287381:95206][1:0x7fae36fc4a40], connection: __posix_open_file, 715:
/data/db/WiredTiger.wt: handle-open: open: File exists Raw: [1551287381:95206][1:0x7fae36fc4a40], connection: __posix_open_file, 715: /data/db/WiredTiger.wt: handle-open: open: File exists
2019-02-27T17:09:41.108+0000 I STORAGE  [initandlisten] WiredTiger message unexpected file WiredTiger.wt found, renamed to WiredTiger.wt.6
2019-02-27T17:09:41.111+0000 E STORAGE  [initandlisten] WiredTiger error (1) [1551287381:111166][1:0x7fae36fc4a40], connection: __posix_open_file, 715:
/data/db/WiredTiger.wt: handle-open: open: Operation not permitted Raw: [1551287381:111166][1:0x7fae36fc4a40], connection: __posix_open_file, 715: /data/db/WiredTiger.wt: handle-open: open: Operation not permitted
2019-02-27T17:09:41.149+0000 E STORAGE  [initandlisten] WiredTiger error (17) [1551287381:149030][1:0x7fae36fc4a40], connection: __posix_open_file, 715: /data/db/WiredTiger.wt: handle-open: open: File exists Raw: [1551287381:149030][1:0x7fae36fc4a40], connection: __posix_open_file, 715: /data/db/WiredTiger.wt: handle-open: open: File exists
2019-02-27T17:09:41.153+0000 I STORAGE  [initandlisten] WiredTiger message unexpected file WiredTiger.wt found, renamed to WiredTiger.wt.7
2019-02-27T17:09:41.156+0000 E STORAGE  [initandlisten] WiredTiger error (1) [1551287381:156133][1:0x7fae36fc4a40], connection: __posix_open_file, 715:
/data/db/WiredTiger.wt: handle-open: open: Operation not permitted Raw: [1551287381:156133][1:0x7fae36fc4a40], connection: __posix_open_file, 715: /data/db/WiredTiger.wt: handle-open: open: Operation not permitted
2019-02-27T17:09:41.177+0000 E STORAGE  [initandlisten] WiredTiger error (17) [1551287381:177375][1:0x7fae36fc4a40], connection: __posix_open_file, 715: /data/db/WiredTiger.wt: handle-open: open: File exists Raw: [1551287381:177375][1:0x7fae36fc4a40], connection: __posix_open_file, 715: /data/db/WiredTiger.wt: handle-open: open: File exists
2019-02-27T17:09:41.192+0000 I STORAGE  [initandlisten] WiredTiger message unexpected file WiredTiger.wt found, renamed to WiredTiger.wt.8
2019-02-27T17:09:41.194+0000 E STORAGE  [initandlisten] WiredTiger error (1) [1551287381:194762][1:0x7fae36fc4a40], connection: __posix_open_file, 715:
/data/db/WiredTiger.wt: handle-open: open: Operation not permitted Raw: [1551287381:194762][1:0x7fae36fc4a40], connection: __posix_open_file, 715: /data/db/WiredTiger.wt: handle-open: open: Operation not permitted
2019-02-27T17:09:41.200+0000 W STORAGE  [initandlisten] Failed to start up WiredTiger under any compatibility version.
2019-02-27T17:09:41.200+0000 F STORAGE  [initandlisten] Reason: 1: Operation not permitted
2019-02-27T17:09:41.201+0000 F -        [initandlisten] Fatal Assertion 28595 at src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.cpp 704

Je ne sais pas comment résoudre ce problème. Cependant, sur Linux et Mac, ce problème n'apparaît pas.


0 commentaires

4 Réponses :


33
votes

AVERTISSEMENT (Windows et OS X): la configuration par défaut de Docker sur Windows et OS X utilise une VM VirtualBox pour héberger le démon Docker. Malheureusement, le mécanisme utilisé par VirtualBox pour partager des dossiers entre le système hôte et le conteneur Docker n'est pas compatible avec les fichiers mappés en mémoire utilisés par MongoDB (voir bogue vbox, docs.mongodb.org et bogue jira.mongodb.org associé). Cela signifie qu'il n'est pas possible d'exécuter un conteneur MongoDB avec le répertoire de données mappé à l'hôte.

Réponse de docker mongo GitHub

Solution de contournement pour conserver les données:

docker volume create --name=mongodata
docker run -d -p 27017:27017 -v mongodata:/data/db --name=mymongo mongodb:3.3

Plus d'infos ici


3 commentaires

merci pour votre réponse mais je n'utilise pas de boîte virtuelle J'utilise VM.


Cette réponse est toujours vraie même avec la distribution par défaut du docker de bureau sur Windows utilisant Hpyer-V. Utilisez le volume de docker créer et tout ira bien.


Existe-t-il un moyen de modifier les commandes ci-dessus afin de travailler avec docker-compose, j'obtiens le même problème: stackoverflow.com/questions/61147270/...



8
votes

Si vous utilisez docker-compose, voici la manière de répliquer la réponse ci-dessus.

services:
  mongodb_container:
    ...
    volumes:
      - mongodata:/data/db
volumes:
  mongodata:

Veuillez noter que l'exemple ci-dessus n'indique que les parties nécessaires du fichier yml pour le stockage mongodb.


8 commentaires

salut où le volume mongodata finit-il par être mappé dans Windows?


@paul Contrairement à bind mounts, les volumes ne sont pas mappés directement à un emplacement de dossier Windows. Il est entièrement géré par docker.


Merci d'avoir répondu. Je suppose que vous copiez simplement tous les fichiers manuellement si vous souhaitez les conserver?


@paul En fait, les volumes de docker sont persistants. Ils ne sont supprimés que si vous les supprimez explicitement. En extraire des données est une autre histoire. Peut-être pourriez-vous un outil de sauvegarde de données pour Mongo


Et des indices quoi? Les données ne sont pas conservées entre les docker-compose up


@standalone C'est un peu étrange. Ils ne partent pas avec les conteneurs. Ils doivent être supprimés explicitement.


@charitha en fait, vous aviez raison et cela fonctionne. Il me manquait le drapeau --build . Donc, pour appliquer les modifications et redémarrer complètement les conteneurs existants, nous devons faire docker-compose up --build


n'oubliez pas de mettre la version: '3' au-dessus des services



3
votes

Bien qu'Augustas ait raison, mais j'ai trouvé cette réponse particulièrement utile avec docker-compose.yml .

Ce que vous pouvez faire comme solution de contournement est:

  1. Créez un fichier .env dans le même chemin que votre fichier docker-compose et stockez le chemin actuel dans une variable d'environnement comme celle-ci:
docker-compose config
  1. Maintenant, dans votre fichier docker-compose , remplacez la variable mentionnée ci-dessus:
    services:
      my-mongo-db:
      build: ./database
      ports:
       - 32815:27017
      volumes:
    - ${MONGO_HOST_DATA}/database/db:/data/db
  • Si vous voulez voir comment le chemin réel a remplacé la variable d'environnement, vous pouvez utiliser la commande suivante:
MONGO_HOST_DATA=/Users/user123/MyMongoProject //path to mongo data folder (for C:\Users\user123\MyMongoProject)

De plus, si vous utilisez un lecteur de disque autre que C: \, vous souhaiterez peut-être modifier les paramètres de partage de fichiers Docker:

Fenêtre des paramètres de Windows Docker

J'espère que cela t'aides.


5 commentaires

Salut, j'ai essayé mais je n'ai pas pu le faire fonctionner. J'ai créé un fichier appelé .env dans le dossier à côté du docker-compose.yml mais cela ne fonctionne toujours pas. Existe-t-il un moyen de tester la lecture du fichier .env? J'utilise asp.net core dans Visual Studio


Oui, en fait, comme je l'ai également mentionné, vous pouvez exécuter la docker-compose config . Il devrait vous montrer le contenu réel du fichier après que tous les espaces réservés soient remplacés par les valeurs réelles


Merci pour l'aide. J'ai réussi à faire fonctionner cela à la fin, mais mongo lance toujours les mêmes erreurs. Je peux le voir écrire tous les fichiers WiredTiger.wt.2 (avec le nombre en hausse). y a-t-il autre chose qui pourrait être faux?


Cela dépend du type d'erreur que vous obtenez. Pouvez-vous vérifier les journaux à l'aide des journaux docker logs <container-id-or-name> ?


Merci pour l'aide. J'ai créé une nouvelle question pour pouvoir inclure les journaux. stackoverflow.com/questions/62345030/… . Le fichier journal répète les lignes que j'ai collées



0
votes

Ce n'est pas tout à fait le même problème, mais j'ai vu les mêmes messages d'erreur lorsque j'ai simplement lancé un conteneur Docker pour mongo dans Ubuntu et tenté de monter un répertoire existant sur le conteneur:

docker run --name some-mongo -p 27017:27017 -v $PWD/db-data:/data/db -d mongo

Dans mon cas, les erreurs ne sont apparues que si j'essayais d'exécuter la commande à partir d'un répertoire sur mon disque dur monté, et j'ai pu le résoudre en migrant ma base de code avec le répertoire / db-data vers mon SSD où Ubuntu est installé.


0 commentaires