Docker: создать постоянный том в определенном каталоге

13

Мне нужно создать постоянный том для Docker. Том должен быть назван extra-addonsи расположен в /mnt/.

Я запускаю эту команду:

sudo docker volume create /mnt/extra-addons

Я получил это сообщение об ошибке:

Error response from daemon: create /mnt/extra-addons: "/mnt/extra-addons" includes invalid characters for a local volume name, only "[a-zA-Z0-9][a-zA-Z0-9_.-]" are allowed. If you intended to pass a host directory, use absolute path

Обратите внимание, что когда я просто запускаю:, sudo docker volume create extra-addonsя не сталкиваюсь с этой проблемой, но когда я проверяю рассматриваемый том с помощью sudo docker inspect extra-addons, я вижу, что он находится в месте, которое мне не нужно:

[
    {
        "CreatedAt": "2018-04-21T14:40:25+03:00",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/extra-addons/_data",
        "Name": "extra-addons",
        "Options": {},
        "Scope": "local"
    }
]

Я имею в виду, я скорее хочу увидеть объем, как это: /mnt/extra-addons

Любая идея?

Биллаль Бегерадж
источник

Ответы:

11

Я нашел решение:

Мне пришлось установить плагин local-persist .

Мне пришлось смонтировать том для создания в точку монтирования следующим образом:

 sudo docker volume create -d local-persist -o mountpoint=/mnt/ --name=extra-addons

Проверьте, получил ли я то, что ожидал:

sudo docker volume inspect extra-addons

Результат:

[
    {
        "CreatedAt": "0001-01-01T00:00:00Z",
        "Driver": "local-persist",
        "Labels": {},
        "Mountpoint": "/mnt/",
        "Name": "extra-addons",
        "Options": {
            "mountpoint": "/mnt/"
        },
        "Scope": "local"
    }
]

Это было то, что я ищу.

Биллаль Бегерадж
источник
6

Если вы не хотите устанавливать какие-либо плагины на ваш докер, я бы порекомендовал создать символическую ссылку для вашего тома:

$ docker volume create <myVolume>
$ docker volume inspect <myVolume> 
[
    {
        "CreatedAt": "0001-01-01T00:00:00Z",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/<myVolume>/_data",
        "Name": "<myVolume>",
        "Options": {},
        "Scope": "local"
    }
]
$ mkdir /mnt/<myVolume>
# if you already have data in your volume, you should copy it to `/mnt/<myVolume>` now
$ sudo rm -rf /var/lib/docker/volumes/<myVolume>/_data
$ sudo ln -s /mnt/<myVolume> /var/lib/docker/volumes/<myVolume>/_data

Теперь не стесняйтесь использовать свой объем как обычно (со всеми вашими данными, поступающими так, /mntкак вы хотели)

Том Меккен
источник
Не думайте, что это хорошая идея - удалить тома, управляемые докером. Вместо этого используйте mount, чтобы смонтировать каталог хоста в Docker.
Lex
3

Я не думаю, что использование local-persistдрайвера - это путь. Это не было обновлено некоторое время. Вы можете смонтировать локальный (хост) каталог в Docker-контейнер, используя Docker-монтирование.

Выполнение следующего создает новый контейнер с подключенным каталогом, сопоставленным с моим рабочим столом.

mkdir extra-addons
docker run -it -v /Users/me/Desktop/extra-addons:/mnt/extra-addons busybox /bin/sh
ls

Теперь вы можете увидеть mntпапку в корне вашего контейнера.

bin dev etc home mnt proc root sys tmp usr var

Создание нового файла в контейнере

touch /mnt/extra-addons/test.txt

Создает файл test.txt на моем хост-компьютере. По указанному пути. Теперь это двухсторонняя общая папка для чтения / записи. Несколько контейнеров могут монтировать одну и ту же папку. И это сохранится, как только вы закроете свой контейнер (ы).

введите описание изображения здесь

закон
источник
Спасибо, это спасло меня на шаг. Я пытался добавить объем. просто смонтировать
Хаим Элия