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.
4 Réponses :
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.3Plus d'infos ici
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/...
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.
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
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:
.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
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
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:
J'espère que cela t'aides.
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
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é.