Я нашел решение для ограничения размера, которым я доволен, и оно вообще не использует команду Linux mount
. Я еще не реализовал это, но описанные ниже тесты достаточно удовлетворительны. Читатели могут пожелать отметить незначительные предупреждения в конце.
Я не пробовал монтировать тома Docker до того, как задавать этот вопрос, так как часть моего исследования наткнулась на постер Stack Overflow, ставящий под сомнение возможность создания томов Docker с учетом ограничения размера. Мой тест показывает, что они могут, но вы можете проверить это на своей собственной платформе, чтобы убедиться, что она работает для вас.
ограничение размера контейнера Docker
Приведенные ниже команды собраны из различных источников в сети.
Начнем с того, что я создаю том, например, с ограничением размера 20 м:
docker volume create \
--driver local \
--opt o=size=20m \
--opt type=tmpfs \
--opt device=tmpfs \
hello-volume
Затем я создаю сервис Alpine Swarm с монтированием в этом контейнере:
docker service create \
--mount source=hello-volume,target=/myvol \
alpine \
sleep 10000
Мы можем убедиться, что контейнер смонтирован, установив оболочку на один контейнер в этом сервисе:
docker exec -it amazing_feynman.1.lpsgoyv0jrju6fvb8skrybqap
/ # ls - /myvol
total 0
ОК, отлично. Итак, оставаясь в этой оболочке, давайте попробуем медленно перегружать этот диск с шагом 5 м. Мы видим, что он терпит неудачу с пятой попытки, чего мы и ожидали:
/ # cd /myvol
/myvol # ls
/myvol # dd if=/dev/zero of=image1 bs=1M count=5
5+0 records in
5+0 records out
/myvol # dd if=/dev/zero of=image2 bs=1M count=5
5+0 records in
5+0 records out
/myvol # ls -l
total 10240
-rw-r--r-- 1 root root 5242880 Sep 16 13:11 image1
-rw-r--r-- 1 root root 5242880 Sep 16 13:12 image2
/myvol # dd if=/dev/zero of=image3 bs=1M count=5
5+0 records in
5+0 records out
/myvol # dd if=/dev/zero of=image4 bs=1M count=5
5+0 records in
5+0 records out
/myvol # ls -l
total 20480
-rw-r--r-- 1 root root 5242880 Sep 16 13:11 image1
-rw-r--r-- 1 root root 5242880 Sep 16 13:12 image2
-rw-r--r-- 1 root root 5242880 Sep 16 13:12 image3
-rw-r--r-- 1 root root 5242880 Sep 16 13:12 image4
/myvol # dd if=/dev/zero of=image5 bs=1M count=5
dd: writing 'image5': No space left on device
1+0 records in
0+0 records out
/myvol #
Наконец, давайте посмотрим, сможем ли мы получить ошибку, переполнив диск за один раз, в случае, если ограничение касается только вновь открытых файловых дескрипторов на полном диске:
/ # cd /myvol
/ # rm *
/myvol # dd if=/dev/zero of=image1 bs=1M count=21
dd: writing 'image1': No space left on device
21+0 records in
20+0 records out
Оказывается, мы можем, так что для меня это выглядит довольно здраво.
Nota bene
Том создается с type
и device
из «tmpfs», что звучит для меня тревожно, как RAM-диск. Я успешно проверил, что том остается подключенным и неповрежденным после перезагрузки системы, поэтому он выглядит хорошо для меня, по крайней мере, на данный момент.
Однако я бы сказал, что когда речь идет об организации ваших систем хранения данных, не просто копируйте то, что у меня есть. Прежде чем запускать его в производство, убедитесь, что том достаточно надежен для вашего случая использования, и, конечно, обязательно включите его в процесс резервного копирования.
(Это для Docker версии 18.06.1-ce, сборка e68fc7a).