💡 Что такое Podman и зачем он вам — это демонless-движок для запуска контейнеров, совместимый с Docker CLI, но работающий без постоянно запущенного фонового процесса. Главное преимущество — rootless-контейнеры: вы можете запускать контейнеры от обычного пользователя, без прав root, что безопаснее для изолированных сред.
Мы установим Podman из официальных репозиториев Debian — это рекомендуемый способ. Версия Podman зависит от вашего релиза Debian: на Debian 13 это Podman 5.4, на Debian 12 — 4.3, на Debian 11 — 3.0. Все они поддерживают rootless-режим.
⚠️ Важное предупреждение: Podman — это не замена Docker, а альтернатива. Если вам нужен именно Docker-демон (например, для совместимости с CI/CD или инструментами, которые ожидают Docker API), используйте нашу инструкцию по установке Docker на Debian. Также не путайте podman-remote (клиент для удалённого управления) с полноценным локальным движком.
Предварительные требования
Прежде чем начать, убедитесь, что ваша система готова:
⚠️ ВАЖНО: Проверьте права sudo перед установкой
Если вы не уверены, есть ли у вашего пользователя права администратора, выполните в терминале:
sudo whoami
Что делает:
sudo— выполняет команду от имени суперпользователяwhoami— показывает имя текущего пользователя
Зачем: Проверяет, может ли ваш пользователь выполнять команды с правами root.
✅ Если выводит root — всё в порядке, можете продолжать.
❌ Если выводит is not in the sudoers file — сначала пройдите наше руководство по настройке sudo.
Дополнительные требования:
- Debian 13, 12 или 11 (любая архитектура, поддерживаемая Debian)
- Интернет-соединение для скачивания пакетов
- Для rootless-контейнеров: пакет
uidmap(будет установлен автоматически, но проверьте) - Понимание разницы между Podman и Docker (объяснено ниже)
Что такое Podman и чем он отличается от Docker
| Характеристика | Podman | Docker |
|---|---|---|
| Архитектура | Демонless (нет постоянно запущенного процесса) | Требует демон (dockerd) |
| Rootless-контейнеры | Из коробки, без дополнительной настройки | Требует специальной конфигурации |
| Systemd-интеграция | Нативная (через podman generate systemd) | Через сторонние утилиты |
| Команды | Docker-совместимые ( podman run, podman build) | Свои (docker run, docker build) |
| Автоматическое обновление | podman auto-update | Нет встроенного |
| Когда использовать | Изолированные среды, CI/CD, разработка | Когда нужен именно Docker API |
💡 Главное правило: Если вы не уверены, что вам нужен именно Docker-демон — используйте Podman. Он безопаснее и легче.
Выбор метода установки Podman
| Метод | Что устанавливает | На каких Debian | Когда использовать |
|---|---|---|---|
| APT-пакет Debian | Полный локальный движок Podman | Debian 13, 12, 11 | Рекомендуемый способ для запуска контейнеров |
podman-docker | Обёртка, которая делает docker → podman | Debian 13, 12 (есть в репозиториях), в Debian 11 — нет | Когда нужна совместимость со скриптами, ожидающими команду docker |
| GitHub release (remote client) | Только podman-remote (клиент для удалённого управления) | Любая (x86_64, arm64) | Только для подключения к уже запущенному Podman API на другом хосте |
| OBS/Kubic репозитории | Устаревшие пакеты | Не для Debian 13/12/11 | Не используйте — они больше не нужны |
⚠️ Важно: podman-remote из GitHub — это только клиент. Он не запускает локальные контейнеры! Установите APT-пакет, если вам нужен локальный движок.
Установка Podman через APT (основной движок)
Шаг 1: Обновление системы
sudo apt update
Что делает: Обновляет список доступных пакетов.
Зачем: Всегда обновляйте список пакетов перед установкой нового ПО.
Шаг 2: Установка Podman
sudo apt install -y podman
Что делает: Устанавливает Podman и все необходимые зависимости (runtime, сетевые помощники, утилиты для rootless).
Что именно устанавливается в зависимости от версии Debian:
| Debian 13 (Trixie) | Debian 12 (Bookworm) | Debian 11 (Bullseye) |
|---|---|---|
Podman 5.4, crun, netavark, aardvark-dns, passt, fuse-overlayfs | Podman 4.3, netavark, aardvark-dns | Podman 3.0, CNI-плагины (старый сетевой стек) |
Шаг 3: Проверка установки
podman --version
Ожидаемый вывод в зависимости от версии Debian:
| Debian 13 | Debian 12 | Debian 11 |
|---|---|---|
podman version 5.4.2 | podman version 4.3.1 | podman version 3.0.1 |
Шаг 4: Проверка rootless-режима
podman info --format 'rootless={{.Host.Security.Rootless}} graphDriver={{.Store.GraphDriverName}} graphRoot={{.Store.GraphRoot}}'
Что делает: Показывает, работает ли Podman в rootless-режиме и где хранятся образы текущего пользователя.
Ожидаемый вывод:
rootless=true graphDriver=overlay graphRoot=/home/username/.local/share/containers/storage
Что означают поля:
rootless=true— вы запускаете контейнеры от обычного пользователя (безsudo). Это безопасно и правильно.graphDriver— драйвер хранения (может бытьoverlayилиvfs).graphRoot— путь к хранилищу образов (должен быть в домашней директории, а не в/var/lib).
Шаг 5: Запуск тестового контейнера
podman run --rm quay.io/podman/hello
Что делает: Скачивает тестовый образ и запускает его.
Ожидаемый вывод:
!... Hello Podman World ...!
Использование Podman: базовые команды
Управление образами и контейнерами
| Команда | Что делает | Пример |
|---|---|---|
podman search nginx | Ищет образ в реестре | podman search nginx |
podman pull IMAGE | Скачивает образ | podman pull docker.io/library/nginx:alpine |
podman images | Список локальных образов | podman images |
podman run IMAGE | Запускает контейнер | podman run -d --name web -p 8080:80 nginx:alpine |
podman ps | Список запущенных контейнеров | podman ps |
podman ps -a | Все контейнеры (включая остановленные) | podman ps -a |
podman logs CONTAINER | Логи контейнера | podman logs web |
podman stop CONTAINER | Останавливает контейнер | podman stop web |
podman rm CONTAINER | Удаляет остановленный контейнер | podman rm web |
podman image rm IMAGE | Удаляет образ | podman image rm nginx:alpine |
💡 Совет: Всегда используйте полное имя образа (например, docker.io/library/nginx:alpine). Это избегает неоднозначности с короткими именами.
Пример: запуск веб-сервера
podman run -d --name my-nginx -p 8080:80 docker.io/library/nginx:alpine
Что делает: Запускает Nginx в фоне (-d), маппит порт 8080 хоста на порт 80 контейнера.
Проверка:
wget -qO- http://127.0.0.1:8080 | grep -m1 '<title>'
Ожидаемый вывод: <title>Welcome to nginx!</title>
Остановка и удаление:
podman rm -f my-nginx
Сборка собственного образа
Создадим простой образ с кастомной HTML-страницей.
Шаг 1: Создание файлов
mkdir -p ~/podman-demo
cd ~/podman-demo
echo 'Hello from Podman on Debian' > index.html
Шаг 2: Создание Containerfile
cat > Containerfile <<'EOF'
FROM docker.io/library/nginx:alpine
COPY index.html /usr/share/nginx/html/index.html
EOF
Что делает: Использует официальный образ Nginx и заменяет стандартную страницу.
Шаг 3: Сборка образа
podman build -t localhost/my-podman-demo:latest .
Что делает: Собирает образ с тегом localhost/my-podman-demo:latest.
Шаг 4: Запуск контейнера из собранного образа
podman run -d --name my-demo -p 8081:80 localhost/my-podman-demo:latest
Шаг 5: Проверка
wget -qO- http://127.0.0.1:8081
Ожидаемый вывод: Hello from Podman on Debian
Шаг 6: Очистка
podman rm -f my-demo
podman image rm localhost/my-podman-demo:latest
rm -rf ~/podman-demo
Установка обёртки podman-docker (Docker-совместимость)
Если у вас есть скрипты, использующие команду docker, можно установить обёртку, которая перенаправляет вызовы на Podman.
⚠️ Доступно только на Debian 13 и Debian 12 — в Debian 11 этого пакета нет.
Проверка, не установлен ли уже Docker
command -v docker
Если вывод пустой — можно устанавливать обёртку.
Если выводит путь (например, /usr/bin/docker) — проверьте, что это не Docker Engine:
docker --version
Установка обёртки
sudo apt install --no-install-recommends podman-docker
Что делает: Устанавливает символическую ссылку docker → podman.
Проверка:
docker --version
Ожидаемый вывод:
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
podman version 5.4.2
Отключение предупреждения (после проверки)
sudo touch /etc/containers/nodocker
Что делает: Создаёт пустой файл, который отключает сообщение «Emulate Docker CLI…».
Установка podman-remote (клиент для удалённого управления)
⚠️ Это не локальный движок! Используйте только для подключения к Podman API на другом хосте.
Шаг 1: Установка зависимостей
sudo apt install -y wget ca-certificates
Шаг 2: Создание скрипта обновления
sudo tee /usr/local/bin/update-podman-remote >/dev/null <<'EOF'
#!/usr/bin/env bash
set -euo pipefail
case "$(uname -m)" in
x86_64) podman_arch=amd64 ;;
aarch64|arm64) podman_arch=arm64 ;;
*) echo "Unsupported architecture: $(uname -m)" >&2; exit 1 ;;
esac
workdir="$(mktemp -d)"
trap 'rm -r "$workdir"' EXIT
asset="podman-remote-static-linux_${podman_arch}.tar.gz"
cd "$workdir"
wget -q "https://github.com/containers/podman/releases/latest/download/${asset}"
wget -q "https://github.com/containers/podman/releases/latest/download/shasums"
grep " ${asset}$" shasums | sha256sum -c -
tar -xzf "$asset"
sudo install -m 0755 "bin/podman-remote-static-linux_${podman_arch}" /usr/local/bin/podman-remote
EOF
sudo chmod 0755 /usr/local/bin/update-podman-remote
Шаг 3: Запуск установки
update-podman-remote
Ожидаемый вывод:
podman-remote-static-linux_amd64.tar.gz: OK
Шаг 4: Проверка
podman-remote --version
Ожидаемый вывод: podman-remote version 5.x.x
Как использовать podman-remote
# Добавление подключения к удалённому Podman серверу
podman-remote system connection add my-server --identity ~/.ssh/id_rsa ssh://user@server/run/user/1000/podman/podman.sock
# Список подключений
podman-remote system connection list
# Запуск контейнера на удалённом сервере
podman-remote --connection my-server run --rm alpine echo "Hello from remote"
Управление Podman
Обновление Podman
Для APT-пакета:
sudo apt update
sudo apt install --only-upgrade podman
Для podman-remote (GitHub):
update-podman-remote
Включение пользовательского сокета (для API-доступа)
По умолчанию Podman не запускает сокет для API. Если нужно, чтобы другие инструменты могли управлять контейнерами через Docker-совместимый API:
systemctl --user enable --now podman.socket
Проверка:
systemctl --user is-active podman.socket
Ожидаемый вывод: active
Путь к сокету:
echo $XDG_RUNTIME_DIR/podman/podman.sock
Отключение:
systemctl --user disable --now podman.socket
Полное удаление Podman
Удаление APT-пакета
sudo apt remove podman
Если устанавливали podman-docker:
sudo apt remove podman-docker
Удаление podman-remote
sudo rm -f /usr/local/bin/podman-remote /usr/local/bin/update-podman-remote
hash -r
Удаление пользовательских данных (контейнеров, образов)
⚠️ Это удалит все образы и контейнеры текущего пользователя!
rm -rf ~/.local/share/containers ~/.config/containers ~/.cache/containers
Удаление данных, созданных с sudo (если запускали контейнеры от root)
sudo rm -rf /var/lib/containers
Удаление неиспользуемых зависимостей
sudo apt autoremove
Решение типичных проблем
8.1 Ошибка: APT не может найти пакет podman
Симптом: sudo apt install podman выдаёт E: Unable to locate package podman.
Причина: Устаревший список пакетов или нестандартная версия Debian.
Пошаговое решение:
Шаг 1: Обновите список пакетов:
sudo apt update
Шаг 2: Проверьте версию Debian:
cat /etc/debian_version
Шаг 3: Если версия не 11, 12 или 13 — Podman может отсутствовать в официальных репозиториях. Рассмотрите установку из бэкпортов или сборку из исходников (выходит за рамки этой статьи).
8.2 Ошибка: podman-docker не найден на Debian 11
Симптом: sudo apt install podman-docker выдаёт E: Unable to locate package podman-docker.
Причина: Пакет podman-docker существует только в Debian 12 и новее.
Решение: Используйте podman напрямую, не полагаясь на обёртку. Если очень нужна команда docker, создайте алиас:
alias docker=podman
(добавьте в ~/.bashrc для постоянного эффекта).
8.3 Ошибка: newuidmap: executable file not found
Симптом: При запуске контейнера ошибка:
Error: command required for rootless mode with multiple IDs: exec: "newuidmap": executable file not found in $PATH
Причина: Не установлен пакет uidmap.
Пошаговое решение:
Шаг 1: Установите uidmap:
sudo apt install -y uidmap
Шаг 2: Проверьте, есть ли у вашего пользователя subordinate ID диапазоны:
grep "^${USER}:" /etc/subuid /etc/subgid
Ожидаемый вывод: Должны быть строки вида username:100000:65536 в обоих файлах.
Шаг 3: Если диапазонов нет, добавьте их:
sudo usermod --add-subuids 100000-165535 --add-subgids 100000-165535 "$USER"
Шаг 4: Выйдите из системы и зайдите заново, затем выполните:
podman system migrate
8.4 Ошибка: systemctl —user не может подключиться к пользовательской шине
Симптом: systemctl --user enable --now podman.socket выдаёт Failed to connect to bus.
Причина: Вы запускаете команду в окружении, где нет пользовательской сессии (например, через sudo -i или в некоторых скриптах).
Решение: Запустите команду от обычного пользователя в нормальной сессии (через SSH с ключом или из графического терминала). Проверьте, что переменная XDG_RUNTIME_DIR установлена:
echo $XDG_RUNTIME_DIR
Должно быть что-то вроде /run/user/1000.
8.5 Ошибка: podman-remote не запускает локальные контейнеры
Симптом: podman-remote run hello-world выдаёт ошибку подключения.
Причина: podman-remote — это клиент для удалённого управления, а не локальный движок. Он не запускает контейнеры на локальной машине без настроенного подключения к Podman API.
Пошаговое решение:
Шаг 1: Установите локальный движок Podman через APT:
sudo apt install podman
Шаг 2: Используйте podman (без -remote) для локальных контейнеров.
8.6 Ошибка: Permission denied при доступе к порту 80
Симптом: podman run -p 80:80 nginx выдаёт ошибку permission denied.
Причина: Rootless-пользователи не могут слушать порты ниже 1024 без дополнительной настройки.
Решение: Используйте порт выше 1024:
podman run -d -p 8080:80 nginx:alpine
Или настройте sysctl net.ipv4.ip_unprivileged_port_start=80 (требует прав root и не рекомендуется для безопасности).
Чек-лист: что проверить после установки
- [ ]
sudo whoamiвыводитroot - [ ]
podman --versionпоказывает версию (5.x на Debian 13, 4.x на Debian 12, 3.x на Debian 11) - [ ]
podman info --format 'rootless={{.Host.Security.Rootless}}'показываетrootless=true - [ ]
podman run --rm quay.io/podman/helloвыполняется без ошибок - [ ]
podman run -d --name test -p 8080:80 nginx:alpineзапускает контейнер - [ ]
podman psпоказывает запущенный контейнер - [ ]
podman rm -f testудаляет контейнер
Заключение
Podman установлен на Debian из официальных репозиториев. Вы можете запускать rootless-контейнеры, собирать образы и управлять ими без постоянно запущенного демона.
Что дальше:
- Изучите официальную документацию Podman
- Настройте автозапуск контейнеров через
podman generate systemd - Для продвинутого использования рассмотрите Podman Desktop — графический интерфейс для управления контейнерами
- Если вам всё же нужен Docker с демоном, установите Docker на Debian
💡 Важно: Podman отлично подходит для разработки, CI/CD и изолированных сред. Если вы привыкли к Docker-командам — используйте alias docker=podman или установите podman-docker. Но помните: Podman не является полной заменой Docker во всех сценариях (некоторые инструменты ожидают именно Docker API). Тестируйте перед миграцией.