РЕДАКТИРОВАТЬ: я первоначально ответил на это с точки зрения не монго, но теперь я понял, что это на самом деле проблема монго при использовании не Linux в качестве хоста: https://hub.docker.com/_/mongo/
ПРЕДУПРЕЖДЕНИЕ (Windows & OS X): настройка Docker по умолчанию в Windows и OS X использует виртуальную машину VirtualBox для размещения демона Docker. К сожалению, механизм VirtualBox, используемый для совместного использования папок между хост-системой и контейнером Docker, не совместим с файлами отображения памяти, используемыми MongoDB (см. Ошибку vbox, docs.mongodb.org и связанную ошибку jira.mongodb.org). Это означает, что невозможно запустить контейнер MongoDB с каталогом данных, сопоставленным с хостом.
Способ обойти это - использовать том докера вместо монтирования с хоста:
# Create a volume for persistent data
$ docker volume create mongodata
mongodata
# Start the mongo container, mount the db volume and
# also my downloads directory as a place to get a file to import
$ docker run -d --name mongo -v mongodata:/data/db \
-v ~/Downloads/:/json mongo:latest
0755cc15f7550dce7fc4bef28da90216a95d5763df98518786533b6314c231d7
# Exec into the container and do the import
$ docker exec -it mongo bash
root@0755cc15f755 :/# mongoimport --db mydb --collection doc \
--type json --file /json/test.json
2018-04-28T14:32:49.102+0000 connected to: localhost
2018-04-28T14:32:49.118+0000 imported 1 document
# Show the db is present and exit
root@0755cc15f755:/# mongo
> show dbs
admin 0.000GB
local 0.000GB
mydb 0.000GB
>
bye
root@0755cc15f755:/# exit
# After exiting the exec, stop the first container
$ docker stop mongo
mongo
# Start a new container using the same volume for data
$ docker run -d --name mongo2 -v mongodata:/data/db mongo:latest
b6bda766217c6fe4ed355c1faaa5880471b6841eb68c8dd75a3cb72aa5c39ff5
# Exec into this
$ docker exec -it mongo2 bash
# Show the data is still there!
root@b6bda766217c:/# mongo
> show dbs
admin 0.000GB
local 0.000GB
mydb 0.000GB
Это ваша лучшая ставка, учитывая, что вы не на родном Linux.
ПРЕДУПРЕЖДЕНИЕ: Я не знаю достаточно о Монго, чтобы точно знать, что произойдет, но в целом запуск двух баз данных одновременно с одним и тем же каталогом данных - действительно плохая идея. Монго может использовать блокировку в /data/db
и обнаруживать, что это происходит, и действовать соответствующим образом, а может и нет. Поэтому, если вы задумывались об этом, всегда лучше быть явным, убедитесь, что у всех, кроме одного из контейнеров, есть каталог данных, смонтированный только для чтения . Вы можете сделать это, добавив :ro
в конец монтирования тома, например -v mongodata:/data/db:ro
.
Кроме того: у меня нет доступа к окнам, чтобы проверить это, но я также заметил, что есть проблема с монтированием файла в контейнер, который вы делаете с вашим файлом JSON. Я думаю, что это приведет к пустому монтированию тома в контейнере. Поэтому вместо этого сделайте, как я, и смонтируйте каталог, содержащий ваши файлы JSON, а не сам файл JSON.