Создать том докера с ограниченным размером

Существует очень ограниченная информация относительно создания тома с параметрами " https://docs.docker.com/engine/reference/commandline/volume_create/ ".

Я просто хочу создать том с ограниченным размером, я пытался,

docker volume create --opt o=size=10m hello-volume

, когда я запускаю простой контейнер hello world с "docker run -v hello-volume:/hello -it ubuntu /bin/bash", я получаю сообщение об ошибке как "docker: ответ об ошибке от демона: … такого устройства нет…"

Поэтому я предположил, что мы должны предоставить полные параметры при создании тома, такие как

“docker volume create --driver local --opt type=*** --opt device=*** --opt o=size=10m hello-volume”

? Если да, то что здесь за "тип" и "устройство"? Я предполагаю, что устройство на самом деле является путем к любому каталогу? Я старался

“docker volume create --driver local --opt type=volume --opt device=/ --opt o=size=10m hello-volume”.

Когда я попытался запустить контейнер как "docker run -v hello-volume:/hello -it ubuntu /bin/bash", я получил ошибку "docker: ответ об ошибке от демона: ошибка при монтировании тома" /var/lib/docker/volume /hello-volume/_data ': ошибка при подключении тома с параметрами: type=' volume 'device=' / 'o=' size=10m ': такого устройства нет.”.

Я старался

docker volume create --driver local --opt type=tmpfs --opt device=tmpfs --opt o=size=10m hello-volume

который, наконец, работает, но данные находятся в памяти, которая не является постоянной. Так может ли кто-нибудь указать, какие есть варианты для "типа" и "устройства" при создании тома (или какой вариант по умолчанию, если мы не даем никаких опций)?

Обновить:

Просто хочу обновить, что кажется, что нет никакого способа ограничить размер диска в локальном драйвере с типом ext4 (хотя заявлено выполнимо в нескольких ответах и ​​других постах). Основная причина в том, что в файловой системе ext4 такого параметра size нет. Я создал том докера:

docker volume create --driver local --opt type=ext4 --opt device=/dev/xvdf --opt o=size=10m hello-volume

Затем осмотрите его (docker volume осмотрите hello-volume) и смонтируйте его вместе с контейнером, на данный момент все выглядит хорошо.

[
    {
        "CreatedAt": "2018-09-01T04:23:57Z",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/hello-volume/_data",
        "Name": "hello-volume",
        "Options": {
            "device": "/dev/xvdf",
            "o": "size=10m",
            "type": "ext4"
        },
        "Scope": "local"
    }
]

docker run -v hello-volume:/myfile1 -exec -it ubuntu /bin/bash

Но когда вы записываете / помещаете большой файл (более 10 м) в "/myfile1" в этом контейнере, предупреждение / исключение не выдается, запись завершается успешно. Я думаю, что "o=size=10m" не распознается файловой системой типа ext4.

2 ответа

Решение

На самом деле это возможно с помощью докеров local громкость драйвера. Этот драйвер принимает параметры, аналогичные параметрам монтирования Linux. Проверьте этот отличный ответ.

Вы были близки с вашей попыткой. Вам необходимо указать --opt device= также как и --opt type= вариант. По сути, это будет монтировать блочное устройство на вашем хосте в ваш док-контейнер как том. type опция указывает тип файловой системы для использования. device опция требует, чтобы вы указали одно из блочных устройств на вашем хосте - /dev/sda2 например. Вы можете увидеть полный список, запустив lsblk,

Однако было бы плохой идеей отобразить существующие диски (если они не используются). Так что вам нужно будет создать новое блочное устройство (используя lvm или эквивалентный), или для тестирования вы можете использовать энергозависимое хранилище (tmpfs), как вы уже пробовали.

К томам Docker прикреплены "драйверы". Драйвер по умолчанию называется "local", и все, что он делает, это создает каталог в /var/lib/docker и монтирует его в контейнер. Нет возможности указать (или ограничить) размер тома.

Я решил проблему с ограничением места на томах докеров (привязав dir с -v) с помощью xfs_quota

Место, где мне нужно было хранить данные, - это том XFS, смонтированный с опцией prjquota

#~ mount 
/dev/mapper/centos_ssp--forfiter--07-home on /home type xfs (rw,[..],**prjquota**)

Я думаю, что ядро ​​должно его поддерживать (rootflags= параметры ядра pquota)

Пример из ссылки выше:

Enabling project quota on an XFS filesystem (restrict files in log file directories to only using 1 gigabyte of space).
# mount -o prjquota /dev/xvm/var /var
# echo 42:/var/log >> /etc/projects
# echo logfiles:42 >> /etc/projid
# xfs_quota -x -c 'project -s logfiles' /var
# xfs_quota -x -c 'limit -p bhard=1g logfiles' /var

Также есть плагин для docker https://github.com/cirocosta/xfsvol

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