Что такое rootless Podman и чем он отличается от Docker
Podman запускает контейнеры от обычного пользователя, без привилегий root. При этом он не держит постоянный демон-root: контейнеры запускаются как дочерние процессы пользователя. У Docker есть rootless-режим, но это отдельный демон dockerd, который работает от пользователя внутри пользовательского пространства имён.
Podman тоже опирается на subuid и subgid, а добавлять строки в эти файлы может только root. Код проекта лежит в репозитории podman-container-tools/podman; старый адрес containers/podman отвечает перенаправлением.
Когда это оправдано, а когда нет
Rootless оправдан, когда сервис не должен получать root на хосте даже при взломе контейнера: веб-приложение, бот, фоновый воркер. Он не оправдан, если вам нужны привилегированные порты без обходных настроек, исходные IP клиентов в логах без доработок или сложные compose-файлы, которые нельзя проверить заранее.
Если на сервере уже работает Docker, переезд не обязателен. Базовую настройку Docker на сервере разбирает статья про настройку Docker на VDS, а общую картину образов и контейнеров — материал про образ и контейнер Docker.
Версии и что в них менялось
На 9 ноября 2026 года текущая стабильная версия Podman — 6.1.4 от 12 октября 2026 года; рядом поддерживается ветка 5.8.9. Ниже четыре вехи для rootless-схемы по заметкам выпусков проекта.
| Версия | Дата | Что изменилось |
|---|---|---|
| 4.4.0 | 1 февраля 2023 | Появился Quadlet: генератор systemd-юнитов |
| 5.0.0 | 19 марта 2024 | Для rootless-сети умолчанием стал pasta вместо slirp4netns |
| 6.0.0 | 24 июня 2026 | Удалены slirp4netns, CNI и cgroups v1 |
| 6.1.4 | 12 октября 2026 | Текущая стабильная версия |
Какая версия есть в вашем дистрибутиве
Версия из пакетного репозитория почти всегда старее текущей, и это решает, есть ли у вас Quadlet. Он появился в 4.4, поэтому в Ubuntu 22.04 и Debian 12 его нет, а в Ubuntu 24.04 и Debian 13 есть. Версии пакетов на 9 ноября 2026 года взяты из каталогов Debian и Ubuntu.
| Дистрибутив | Версия Podman | Quadlet |
|---|---|---|
| Ubuntu 22.04 | 3.4.4 | Нет |
| Ubuntu 24.04 | 4.9.3 | Есть |
| Debian 12 | 4.3.1 | Нет |
| Debian 13 | 5.4.2 | Есть |
Версии пакетов быстро устаревают, поэтому проверяйте свою командой podman --version.
Установка и первый запуск
Установка занимает одну команду из репозитория дистрибутива, а контейнер запускается от обычного пользователя. Для этого в файлах subuid и subgid должна быть строка с вашим именем; обычно её создаёт сам системный администратор при добавлении пользователя.
sudo apt install podman
grep "$USER" /etc/subuid /etc/subgid
podman run --rm -d --name web -p 8080:80 docker.io/library/nginx:stable
podman ps
curl -sI http://127.0.0.1:8080/Если grep ничего не вывел, попросите администратора добавить диапазоны: без них rootless-контейнер не запустится.
Ограничения rootless-режима
Главная цена rootless — сеть. Порты ниже 1024 по умолчанию недоступны, а при публикации портов через rootlessport сервис теряет исходный IP клиента. Это не баги, а следствие того, что у процесса нет прав настраивать сеть хоста.
- Привилегированные порты: в документации проекта сказано, что Podman не может привязать контейнер к портам ниже 1024.
- Исходный IP: rootless-сети типа bridge по умолчанию используют rootlessport, который теряет адрес клиента. Режим
rootless_port_forwarder="pasta"его сохраняет, но в 6.0.0 он отмечен как экспериментальный.
Обход для портов — понизить порог для непривилегированных процессов командой sysctl net.ipv4.ip_unprivileged_port_start=443 (значение из документации проекта); чтобы оно пережило перезагрузку, запишите его в файл в /etc/sysctl.d/. Помните: настройка действует для всех пользователей хоста, а не только для Podman.
Альтернатива без изменения ядра — держать контейнер на высоком порту, а на 80 и 443 поставить обратный прокси. Про взаимодействие Docker с межсетевым экраном читайте в статье про обход firewall через Docker и UFW; для Podman проверьте поведение на своём стенде.
Quadlet: контейнер как служба systemd
Quadlet превращает файлы .container, .pod, .network и .volume в юниты systemd, поэтому контейнер перезапускается, пишет логи в журнал и стартует при загрузке. Для rootless файлы кладут в каталог ~/.config/containers/systemd/.
- Создайте файл
~/.config/containers/systemd/web.containerс содержимым ниже. - Выполните
systemctl --user daemon-reload, чтобы systemd подхватил файл. - Запустите службу и проверьте её состояние.
- Разрешите пользователю работать без входа в систему:
loginctl enable-linger.
[Unit]
Description=Web container
[Container]
Image=docker.io/library/nginx:stable
PublishPort=8080:80
[Install]
WantedBy=default.targetСовместимость с командами и compose-файлами Docker
Команды podman повторяют команды docker, но совместимость неполная. podman compose — тонкая обёртка над внешним провайдером, то есть docker-compose или podman-compose; если установлены оба, берётся docker-compose.
Сокет с Docker-совместимым API включается одной командой, а клиентам Docker указывают его адрес через переменную DOCKER_HOST. В документации Podman это описано как слой совместимости с API Docker версии 1.40; с версии 6.1.0 его дорабатывают под версию 1.44.
systemctl --user enable --now podman.socket
export DOCKER_HOST=unix://$XDG_RUNTIME_DIR/podman/podman.sock
docker psЧастые вопросы
Можно ли просто заменить docker на podman в скриптах?
Часто да, но проверять нужно каждый скрипт. Базовые команды совпадают, а вот сеть, привилегированные порты и часть полей compose ведут себя иначе.
Почему мои старые инструкции со slirp4netns не работают?
В Podman 5.0.0 умолчанием стал pasta, а в 6.0.0 поддержку slirp4netns удалили. На версии 6 и новее используйте pasta.
Что делать клиентам ZevsHost?
Podman ставят на VPS или выделенном сервере с доступом root; на общем хостинге серверной частью занимается панель. Установку, subuid и subgid, порты и службы systemd настраиваете вы.