Траблшутинг медленного запуска Docker Daemon: /var/lib/docker и Debug-режим
- Сервис
docker.serviceстартует несколько минут или падает по таймауту systemd (Job for docker.service failed because a timeout was exceeded). - Высокая утилизация I/O диска процессом
dockerdилиcontainerdсразу после включения сервера. - Зависание команд
docker psиdocker infoпосле перезагрузки демона.
1. Включение режима детальной отладки (Debug Mode)
Отредактируйте /etc/docker/daemon.json:
{
"debug": true,
"log-level": "debug"
}Запустите демон вручную для отслеживания блокировок в реальном времени:
systemctl stop docker docker.socket containerd
dockerd --debug2. Анализ узких мест в журнале Systemd
journalctl -u docker.service -u containerd.service -b --no-pager | grep -Ei "timeout|failed|slow|loading"3. Устранение проблем с поврежденными слоями overlay2
Если демон тратит время на сканирование битых контейнеров и метаданных в /var/lib/docker/containers/:
# Проверка целостности дисковой подсистемы
dmesg -T | grep -Ei "I/O error|EXT4-fs error|XFS"
# Очистка состояния неконсистентных контейнеров (после бэкапа)
mkdir -p /tmp/docker_corrupt_bak
mv /var/lib/docker/containers/* /tmp/docker_corrupt_bak/4. Увеличение таймаута запуска службы в Systemd
Создайте переопределение /etc/systemd/system/docker.service.d/timeout.conf:
[Service]
TimeoutSec=300systemctl daemon-reload && systemctl restart docker Частые вопросы (FAQ)
Почему dockerd долго сканирует /var/lib/docker при старте?
Если на сервере накоплены десятки тысяч неиспользуемых слоев, анонимных томов и остановленных контейнеров, драйвер overlay2 при старте выполняет проверку каждого графа метаданных.
Как containerd влияет на скорость запуска Docker?
Docker работает поверх containerd. Если containerd заблокирован на проверке своих сокетов или баз данных bolt.db (/var/lib/containerd/io.containerd.metadata.v1.bolt/meta.db), dockerd не сможет инициализироваться.