Сводка
Учитывая, что:
- Драйвер хранилища
docker
пользователей - ZFS; - Только
docker
создает legacy
наборов данных;
Bash:
$ docker ps -a | wc -l
16
$ docker volume ls | wc -l
12
$ zfs list | grep legacy | wc -l
157
16 контейнеров (как работающих, так и остановленных).12 томов. 157 наборов данных. Это похоже на огромное количество устаревших наборов данных.Мне интересно, если многие из них настолько осиротели, что даже docker
не знает о них больше, поэтому они не очищаются.
Обоснование
Огромный списокустаревших томов в моем пуле Debian zfs.Они начали появляться, когда я начал использовать Docker на этом компьютере:
$ sudo zfs list | grep legacy | wc -l
486
Все они имеют вид:
pool/var/<64-char-hash> 202K 6,18T 818M legacy
Это местоположение используется исключительно Docker.
$ docker info | grep -e Storage -e Dataset
Storage Driver: zfs
Parent Dataset: pool/var
Я начал убирать.
$ docker system prune -a
(...)
$ sudo zfs list | grep legacy | wc -l
154
Так лучше.Тем не менее, я запускаю только около 15 контейнеров, и после запуска docker system prune -a
история или каждый контейнер показывает, что только последний слой изображения все еще доступен.Остальные <missing>
(потому что они очищены).
$ docker images | wc -l
15
Если все контейнеры используют только последний слой изображения после удаления остальных, не должен докер использовать только 15 слоев изображения и15 работающих контейнеров, всего 30 томов?
$ sudo zfs list | grep legacy | wc -l
154
Могу ли я узнать, используются ли они контейнером / изображением?Есть ли команда, которая обходит все наборы данных pool/var/<hash>
в ZFS и выясняет, к какому контейнеру / образу докера они принадлежат?Либо многие из них могут быть удалены, либо я не понимаю, как выяснить (помимо простого доверия docker system prune
), что они не могут.
Чрезмерное использование томов zfs докером портит мою zfs list
команда, как визуально, так и с точки зрения производительности.Перечисление томов zfs теперь занимает ~ 10 секунд вместо <1. </p>
Доказательство того, что докер не видит больше зависающих счетчиков
$ docker ps -qa --no-trunc --filter "status=exited"
(no output)
$ docker images --filter "dangling=true" -q --no-trunc
(no output)
$ docker volume ls -qf dangling=true
(no output)
zfs list
пример:
NAME USED AVAIL REFER MOUNTPOINT
pool 11,8T 5,81T 128K /pool
pool/var 154G 5,81T 147G /mnt/var
pool/var/0028ab70abecb2e052d1b7ffc4fdccb74546350d33857894e22dcde2ed592c1c 1,43M 5,81T 1,42M legacy
pool/var/0028ab70abecb2e052d1b7ffc4fdccb74546350d33857894e22dcde2ed592c1c@211422332 10,7K - 1,42M -
# and 150 more of the last two with different hashes