Pour contourner ce problème, vous pouvez utiliser un outil comme rsync
pour déplacer les fichiers db dans le répertoire mappé pendant que Mongo est en cours d'exécution. Le bogue sous-jacent est lié à la latence entre le volume mappé Windows et ce chemin de liaison dans le conteneur. Le déchargement du travail sur rsync dissocie la latence des exigences d'exécution de Mongo.
Exemple
Créer un Dockerfile
de base comme ceci :
FROM mongo:latest
RUN apt-get update && \
apt-get install -y \
rsync
ADD init.sh /init.sh
Où init.sh
est :
#!/bin/bash
migrate_db() {
while true
do
rsync -avh /data/db/* /data/mapped-db
sleep 5
done
}
migrate_db &
#Execute a command
mongod --smallfiles --logpath=/dev/null --verbose &
#Wait
wait $!
Ensuite, lors du lancement du conteneur, commencez simplement par ./init.sh
comme ENTRYPOINT
.