Установка Podman на Debian 13, 12 и 11

💡 Что такое 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

ХарактеристикаPodmanDocker
АрхитектураДемон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Обёртка, которая делает
dockerpodman
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-overlayfsPodman 4.3, netavark, aardvark-dnsPodman 3.0, CNI-плагины
(старый сетевой стек)

Шаг 3: Проверка установки

podman --version

Ожидаемый вывод в зависимости от версии Debian:

Debian 13Debian 12Debian 11
podman version 5.4.2podman version 4.3.1podman 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

Что делает: Устанавливает символическую ссылку dockerpodman.

Проверка:

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). Тестируйте перед миграцией.