Подтвердить что ты не робот

Как установить объем данных 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 может работать!

Но при настройке объема данных это не... Кто может мне помочь?

4b9b3361

Ответ 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, на котором хранится фактический файл журнала базы данных.