Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

PODMAN_MIGRATION_ROOTLESS Linux / DevOps

Переход с Docker на Podman: rootless запуск, Pod'ы и интеграция с systemd

Обновлено: 21.08.2026
  • Требование безопасности запускать контейнеры без прав root (Rootless) и без постоянного демона с повышенными привилегиями.
  • Необходимость управления жизненным циклом контейнеров через стандартные механизмы Linux Systemd.
  • Ограничения архитектуры Docker Daemon как единой точки отказа (Single Point of Failure).

1. Установка Podman и настройка сопоставления UID/GID

# RHEL / Rocky / AlmaLinux
dnf install -y podman podman-docker

# Ubuntu / Debian
apt-get install -y podman podman-docker

# Настройка диапазонов суб-UID для непривилегированного пользователя
sudo usermod --add-subuids 100000-165535 --add-subgids 100000-165535 devops_user

2. Настройка бесшовного алиаса для Docker CLI

Пакет podman-docker создает симлинк /usr/bin/docker -> /usr/bin/podman. Также включите эмуляцию сокета для сторонних утилит (например, Docker Compose):

systemctl --user enable --now podman.socket
export DOCKER_HOST="unix:///run/user/$UID/podman/podman.sock"

3. Запуск группы контейнеров в едином Pod (аналог Kubernetes Pod)

# 1. Создание пода с пробросом портов
podman pod create --name web-stack -p 8080:80

# 2. Добавление контейнеров внутрь пода (разделяют один network namespace)
podman run -d --pod web-stack --name nginx-front nginx:alpine
podman run -d --pod web-stack --name app-api my-api:latest

4. Автогенерация Systemd-юнитов через Podman Quadlets

Создайте файл ~/.config/containers/systemd/myapp.container:

[Unit]
Description=My Rootless App
After=network-online.target

[Container]
Image=docker.io/library/nginx:alpine
PublishPort=8080:80
Restart=always

[Install]
WantedBy=default.target

Активируйте сервис пользователя:

systemctl --user daemon-reload
systemctl --user enable --now myapp.service

# Разрешить автозапуск сервисов пользователя при загрузке без активной SSH-сессии
loginctl enable-linger devops_user
💡 Практика специалистов: Всегда активируйте команду 'loginctl enable-linger ' для rootless-пользователей Podman, иначе при выходе пользователя из SSH-сессии systemd автоматически остановит все запущенные контейнеры.

Частые вопросы (FAQ)

Поддерживает ли Podman утилиту docker-compose?

Да. Podman поддерживает как нативный podman-compose, так и стандартный docker-compose v2 через запущенный сокет эмуляции API podman.socket.

Может ли rootless контейнер в Podman слушать 80 и 443 порты?

По умолчанию в Linux порты ниже 1024 привилегированные. Чтобы разрешить пользователю занимать их, выполните: sysctl -w net.ipv4.ip_unprivileged_port_start=80.

Полезные материалы
Рекомендуем