Контейнер Windows Docker mongo не работает с монтированием тома

У меня есть следующая команда Docker

docker run -v //c/data:/data/db mongo

и я получаю следующий ответ об ошибке от docker / mongo

MongoDB starting : pid=1 port=27017 dbpath=/data/db 64-bit host=8706cbf1b78f
db version v3.4.2
git version: 3f76e40c105fc223b3e5aac3e20dcd026b83b38b
OpenSSL version: OpenSSL 1.0.1t  3 May 2016
allocator: tcmalloc
modules: none
build environment:
    distmod: debian81
    distarch: x86_64
    target_arch: x86_64
options: {}
wiredtiger_open config: create,cache_size=478M,session_max=20000,eviction=(threads_max=4),config_base=false,statistics=(fast),log=(enabled=true,archive=true,path=journal,compressor=snappy),file_manager=(close_idle_time=100000),checkpoint=(wait=60,log_size=2GB),statistics_log=(wait=0),
WiredTiger error (1) [1489982988:687653][1:0x7fec9df0ccc0], connection: /data/db/WiredTiger.wt: handle-open: open: Operation not permitted
Assertion: 28595:1: Operation not permitted src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.cpp 267
exception in initAndListen: 28595 1: Operation not permitted, terminating
shutdown: going to close listening sockets...
removing socket file: /tmp/mongodb-27017.sock
shutdown: going to flush diaglog...
now exiting
shutting down with code:100

теперь, когда я удаляю том, монго работает, но мне нужно сохранить мои данные, поэтому мне нужно каким-то образом смонтировать том, просто не уверенный, что я делаю не так в данный момент.

Я вижу файлы, которые появляются в моей папке, но не уверен, почему я получаю ошибку 100

1 ответ

Чтобы обойти это, вы можете использовать такой инструмент, как rsync переместить файлы БД в сопоставленный каталог во время работы Mongo. Основная ошибка связана с задержкой между отображаемым томом Windows и тем путем привязки в контейнере. Разгрузка работы на rsync отделяет задержку от требований времени выполнения Mongo.

пример

Создать базовый Dockerfile как это:

FROM mongo:latest

RUN apt-get update && \ 
    apt-get install -y \
        rsync

ADD init.sh /init.sh

куда init.sh является:

#!/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 $!

Затем, при запуске контейнера, просто начните с ./init.sh как твой ENTRYPOINT,

Другие вопросы по тегам