Контейнеры не запускаются: файловая система не поддерживает наложение
Наложение слоёв требует от нижележащей файловой системы поддержки расширенных атрибутов и отдельных возможностей. Сетевые и некоторые виртуальные файловые системы её не дают, и контейнеры не создаются — при полностью исправной службе.
Вероятные причины
По порядку: сверху то, что встречается чаще.
-
Каталог службы на неподходящей файловой системе
Перенос каталога данных контейнеров на сетевой или необычный раздел лишает наложение нужных возможностей.
-
Расширенные атрибуты отключены в параметрах монтирования
Даже подходящая файловая система может быть смонтирована без нужных возможностей.
-
Выбран неподходящий способ хранения слоёв
Служба может использовать разные способы. Способ, выбранный автоматически, не всегда работает на вашем разделе.
Диагностика
Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.
Где лежат данные контейнеров и с какими параметрами.
findmnt -T /var/lib/docker -o TARGET,SOURCE,FSTYPE,OPTIONSВыбранный способ хранения слоёв.
sudo docker info 2>/dev/null | grep -iE "Storage Driver|Backing"Сообщения службы о слоях.
journalctl -u docker -n 30 --no-pager | grep -iE "overlay|driver"Решение
Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.
- Почему происходит
- Перенос каталога данных контейнеров на сетевой или необычный раздел лишает наложение нужных возможностей.
- Как проверить
-
Посмотрите, где лежат данные и какая там файловая система.
findmnt -T /var/lib/docker -o TARGET,SOURCE,FSTYPE 2>/dev/null journalctl -u docker -n 20 --no-pager | grep -iE "overlay|driver"
- Как исправить
- Перенесите каталог данных на локальную файловую систему с поддержкой расширенных атрибутов. Сетевые разделы для этого не годятся.
- Почему происходит
- Даже подходящая файловая система может быть смонтирована без нужных возможностей.
- Как проверить
-
Посмотрите параметры монтирования.
findmnt -T /var/lib/docker -o TARGET,OPTIONS 2>/dev/null
- Как исправить
- Перемонтируйте раздел с поддержкой расширенных атрибутов. Это свойство монтирования, а не только файловой системы.
- Почему происходит
- Служба может использовать разные способы. Способ, выбранный автоматически, не всегда работает на вашем разделе.
- Как проверить
-
Посмотрите выбранный способ хранения.
sudo docker info 2>/dev/null | grep -iE "Storage Driver|Backing Filesystem"
- Как исправить
- Задайте подходящий способ хранения явно в настройках службы. Смена способа означает потерю существующих образов: их нужно загрузить заново.
Пример вывода
Каталог данных на сетевом разделе. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.
dockerd[11100]: failed to start daemon: error initializing graphdriver: driver not supported: overlay2
kernel: overlayfs: upper fs does not support tmpfile.
kernel: overlayfs: upper fs does not support xattr, falling back to index=off,metacopy=off.
Связанные ошибки
- Docker: no space left on device при запуске контейнеров Раздел с /var/lib/docker заполнен образами и слоями. Как посчитать занятое и что можно удалить безопасно.
- Docker: демон не запускается без containerd docker.service падает, потому что не работает containerd.service. Разбор зависимости и сокета containerd.
- Mount process exited, code=exited, status=32: не найдено устройство Монтирование не проходит: устройство или UUID не найдены, неверная файловая система, недоступен сетевой ресурс. Код 32 от команды mount.
- Failed to connect to bus: подключение к шине недоступно Команды systemctl не работают: нет подключения к шине. Разбор для контейнеров, сеансов по ssh и служб пользователя.
- Function not implemented в контейнере Ошибка 38 при системном вызове: вызов запрещён фильтром или отсутствует в окружении. Разбор для контейнеров.
- fsck failed: проверка файловой системы остановила загрузку Проверка файловой системы при загрузке завершилась неудачей. Как прочитать причину, запустить проверку вручную и что делать с корневым разделом.
- status=219/CGROUP в systemd Код 219/CGROUP: не удалось создать или настроить контрольную группу службы. Причины на уровне системы и контейнеров.
- status=225/NETWORK в systemd Код 225/NETWORK: не удалось создать сетевое пространство имён для службы при PrivateNetwork=yes или NetworkNamespacePath=.
Где встречается чаще всего
Источники
- Документация ядра: наложение файловых систем
-
Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
Воспроизведено переносом каталога данных контейнеров на сетевой раздел.