Що таке 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 налаштовуєте ви.