Подробный гайд: расположение контейнеров в ALT Linux

Контейнеры в ALT Linux: Docker — /var/lib/docker, Podman — /var/lib/containers, LXC — /var/lib/lxc. Пути настраиваются в конфигах.

2026.04.20                  


Подробный гайд: расположение контейнеров в ALT LinuxПодробный гайд: расположение контейнеров в ALT Linux В ALT Linux расположение контейнеров не является фиксированным и полностью зависит от используемой технологии контейнеризации. Дистрибутив следует стандартной иерархии FHS, поэтому пути совпадают с общепринятыми в экосистеме Linux. Ниже приведён подробный гайд по всем основным runtime, способам проверки, изменения путей и особенностям ALT Linux.


1. Как определить, какая технология контейнеров используется

# Проверить установленные пакеты
rpm -qa | grep -E 'docker|podman|lxc|systemd-container'

# Посмотреть активные сервисы
systemctl list-units --type=service | grep -E 'docker|podman|lxc|machines'

# Узнать, где хранятся образы/контейнеры (универсально)
find /var/lib -maxdepth 3 -name 'containers' -o -name 'docker' -o -name 'machines' 2>/dev/null

2. Docker

Параметр Значение
Стандартный путь /var/lib/docker/
Образы /var/lib/docker/image/
Слои FS /var/lib/docker/overlay2/ (или btrfs, zfs)
Контейнеры /var/lib/docker/containers/
Тома /var/lib/docker/volumes/
Конфиг демона /etc/docker/daemon.json

Проверка текущего пути

docker info | grep "Docker Root Dir"
# или
docker info --format '{{.DockerRootDir}}'

Изменение пути

  1. Остановите Docker: sudo systemctl stop docker
  2. Отредактируйте /etc/docker/daemon.json:
{
  "data-root": "/mnt/data/docker"
}

3. Перенесите данные:

sudo rsync -aXSH /var/lib/docker/ /mnt/data/docker/
sudo mv /var/lib/docker /var/lib/docker.old  # для отката
  1. Запустите: sudo systemctl start docker
  2. Убедитесь: docker info | grep Root

Важно:

  • Не удаляйте /var/lib/docker/ вручную. Docker управляет метаданными в SQLite/BoltDB.

3. Podman (рекомендуется в современных дистрибутивах)

Режим Путь
Root (sudo) /var/lib/containers/storage/
Rootless (пользователь) ~/.local/share/containers/storage/
Конфиг (системный) /etc/containers/storage.conf
Конфиг (пользовательский) ~/.config/containers/storage.conf

Проверка

podman info | grep -A2 "graphRoot\|runRoot"
# или
podman system info --format '{{.Store.GraphRoot}}'

Изменение пути

В /etc/containers/storage.conf (или пользовательском):

[storage]
driver = "overlay"
graphroot = "/mnt/data/podman"
runroot = "/run/podman"

Перенос аналогичен Docker, но для rootless убедитесь, что у пользователя есть права на новый каталог.

Особенность rootless:

  • используется fuse-overlayfs. Убедитесь, что установлен пакет fuse-overlayfs.

4. LXC / LXD

Параметр Значение
Стандартный путь /var/lib/lxc/
Конфиг контейнера /var/lib/lxc/<имя>/config
Корневая ФС /var/lib/lxc/<имя>/rootfs/
Системный конфиг /etc/lxc/default.conf

Проверка

lxc-ls --fancy
# или
grep lxcpath /etc/lxc/lxc.conf

Изменение пути

В /etc/lxc/lxc.conf:

lxcpath = /mnt/data/lxc

Или передавайте параметр -P/--lxcpath при запуске команд. LXC не переносит данные автоматически: скопируйте /var/lib/lxc/ вручную и обновите lxcpath.


5. systemd-nspawn

Параметр Значение
Стандартный путь /var/lib/machines/
Контейнер Папка с полной rootfs: /var/lib/machines/<имя>/
Конфиг /etc/systemd/nspawn/<имя>.nspawn

Проверка

machinectl list
systemd-nspawn --list

Изменение пути

Редко требуется. Можно изменить через параметр MachineDirectory= в systemd-nspawn@.service или монтировать другой каталог в /var/lib/machines/.


6. Как безопасно перенести хранилище контейнеров (универсальный алгоритм)

1. Остановите сервис:

`sudo systemctl stop docker` (или podman, lxc)

2. Синхронизируйте данные:

   sudo rsync -aHAXx --info=progress2 /старый/путь/ /новый/путь/
  1. Обновите конфигурацию (см. разделы выше)

4. Обновите права/контексты:

   sudo chown -R root:root /новый/путь  # для root-режима
   sudo restorecon -Rv /новый/путь      # если включён SELinux/AppArmor
  1. Запустите сервис и проверьте работоспособность
  2. Удалите старую папку только после успешного теста

7. Особенности ALT Linux

Аспект Примечание
Рекомендуемый runtime podman (поставляется в базовых репозиториях, поддерживает rootless из коробки)
Пакеты podman, docker (или docker-engine), lxc, systemd-container
Менеджер пакетов apt-rpm (команды apt-get install, urpmi не используются)
Мандатный контроль По умолчанию может быть активен AppArmor. При переносе путей проверьте журналы: journalctl -u docker/podman -f
Файловые системы ALT поддерживает btrfs и zfs для нативного снапшотинга контейнеров. Указывайте driver = "btrfs" в конфигах при необходимости
Системные юниты Все сервисы управляются через systemd. Переопределение путей через systemctl edit безопасно

8. Резервное копирование и миграция

Технология Экспорт контейнера Экспорт образа
Docker docker export > container.tar docker save > image.tar
Podman podman export > container.tar podman save > image.tar
LXC lxc-copy -n <имя> -N <новый> -s или архив /var/lib/lxc/<имя>/ lxc image export (через LXD)
nspawn tar -C /var/lib/machines/<имя> -cf backup.tar .

Рекомендация:

  • Не бэкапьте каталоги /var/lib/docker/ или /var/lib/containers/ простым tar. Используйте штатные утилиты экспорта, иначе при восстановлении могут нарушиться метаданные, хеши слоёв и ссылки.

Чек-лист перед изменением путей

  • [ ] Остановлен соответствующий сервис
  • [ ] Создана точка монтирования/раздел с нужной ФС
  • [ ] Используется rsync -aHAXx для сохранения атрибутов
  • [ ] Конфиг изменён и валидирован
  • [ ] Сервис запущен, контейнеры проверены (docker ps, podman ps, machinectl list)
  • [ ] Старый каталог переименован (не удалён) на 24–48 часов для отката