Как установить объем данных docker mongo
Я хочу использовать Dockerizing MongoDB и хранить данные в локальном томе.
Но.. не удалось...
У него есть mongo: последние изображения
kerydeMacBook-Pro:~ hu$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
mongo latest b11eedbc330f 2 weeks ago 317.4 MB
ubuntu latest 6cc0fc2a5ee3 3 weeks ago 187.9 MB
Я хочу сохранить моно данные в ~/data. поэтому ---
kerydeMacBook-Pro:~ hu$ docker run -p 27017:27017 -v ~/data:/data/db --name mongo -d mongo
f570073fa3104a54a54f39dbbd900a7c9f74938e2e0f3f731ec8a3140a418c43
Но... он не работает...
docker ps - no demon mongo
kerydeMacBook-Pro:~ hu$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
попробуйте запустить "mongo" - неудачно
kerydeMacBook-Pro:~ hu$ docker exec -it f57 bash
Error response from daemon: Container f57 is not running
Докер проверяет монго
kerydeMacBook-Pro:~ hu$ docker inspect mongo
[
{
"Id": "f570073fa3104a54a54f39dbbd900a7c9f74938e2e0f3f731ec8a3140a418c43",
"Created": "2016-02-15T02:19:01.617824401Z",
"Path": "/entrypoint.sh",
"Args": [
"mongod"
],
"State": {
"Status": "exited",
"Running": false,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 0,
"ExitCode": 100,
"Error": "",
"StartedAt": "2016-02-15T02:19:01.74102535Z",
"FinishedAt": "2016-02-15T02:19:01.806376434Z"
},
"Mounts": [
{
"Source": "/Users/hushuming/data",
"Destination": "/data/db",
"Mode": "",
"RW": true
},
{
"Name": "365e687c4e42a510878179962bea3c7699b020c575812c6af5a1718eeaf7b57a",
"Source": "/mnt/sda1/var/lib/docker/volumes/365e687c4e42a510878179962bea3c7699b020c575812c6af5a1718eeaf7b57a/_data",
"Destination": "/data/configdb",
"Driver": "local",
"Mode": "",
"RW": true
}
],
Если я не задаю объем данных, изображение mongo может работать!
Но при настройке объема данных это не...
Кто может мне помочь?
Ответы
Ответ 1
Попробуйте проверить журналы докеров, чтобы узнать, что происходит, когда контейнер остановлен и переходит в режим "Existing".
См. также, если бы указать полный путь для тома:
docker run -p 27017:27017 -v /home/<user>/data:/data/db ...
OP добавляет:
docker logs mongo
exception in initAndListen: 98
Unable to create/open lock file: /data/db/mongod.lock
errno:13 Permission denied
Is a mongod instance already running?
terminating 2016-02-15T06:19:17.638+0000
I CONTROL [initandlisten] dbexit: rc: 100
Ошибка: 13 - это проблема 30.
Этот комментарий добавляет:
Это проблема с правами на файл/разрешение (не связанная с этим изображением докеров), либо с помощью boot2docker с VB, либо с бродячим полем с VB.
Тем не менее мне удалось взломать владение, переустановить общий том /Users в boot2docker на uid 999 и gid 999 (к чему используется изображение докеры mongo), и он запустил его:
$ boot2docker ssh
$ sudo umount /Users
$ sudo mount -t vboxsf -o uid=999,gid=999 Users /Users
Но... mongod падает из-за того, что тип файловой системы не поддерживается (mmap не работает на vboxsf)
Таким образом, фактическим решением было бы попробовать DVC: Контейнер тома данных, потому что сейчас mongodb doc упоминает:
MongoDB требует файловую систему, которая поддерживает fsync()
в каталогах.
Например, общие папки HGFS и Virtual Boxs не поддерживают это операции.
Итак:
установка на OSX не будет работать для MongoDB из-за того, как работают общие папки виртуальных виртуальных машин.
Для DVC (Контейнер томов данных) попробуйте docker volume create
:
docker volume create mongodbdata
Затем используйте его как:
docker run -p 27017:27017 -v mongodbdata:/data/db ...
И посмотрите, работает ли это лучше.
Как я упоминаю в комментариях:
A docker volume inspect mongodbdata
(см. docker volume inspect
) предоставит вам свой путь (тогда вы сможете сделать резервную копию, если вам нужно)
Ответ 2
По состоянию на лето 2017 года локальный том не считается лучшей практикой.
Per Docker Docs:
Объемы являются предпочтительным механизмом для сохранения данных, создаваемых и используемых контейнерами Docker.
docker volume create mongodbdata
docker run -p 27017:27017 -v mongodbdata:/data/db mongo
Ответ 3
Через Docker Compose:
version: '2'
services:
mongodb:
image: mongo:latest
volumes:
- ./<your-local-path>:/data/db
/data/db
- это местоположение данных, сохраненных на контейнере.
<your-local-path>
- это местоположение на вашей машине AKA, на котором хранится фактический файл журнала базы данных.