Tools: Podman Has a Free API — Rootless Containers Without Docker Daemon (2026)

Tools: Podman Has a Free API — Rootless Containers Without Docker Daemon (2026)

Why Podman Over Docker?

Quick Start

Basic Commands (Same as Docker)

Pods — Kubernetes-Style Grouping

Podman Compose

Rootless Containers

Systemd Integration

Podman REST API Podman is a daemonless container engine that runs containers as your regular user — no root, no daemon, no Docker socket. It's CLI-compatible with Docker but architecturally superior. Need to containerize your scraping infrastructure? Check out my Apify actors for production-ready scrapers, or email [email protected] for custom container-based solutions. Docker or Podman — which do you use in production? Share below! Templates let you quickly answer FAQs or store snippets for re-use. Hide child comments as well For further actions, you may consider blocking this person and/or reporting abuse

Command

Copy

# Install (Fedora/RHEL) -weight: 600;">sudo -weight: 500;">dnf -weight: 500;">install podman # Install (Ubuntu) -weight: 600;">sudo -weight: 500;">apt -weight: 500;">install podman # Install (macOS) -weight: 500;">brew -weight: 500;">install podman podman machine init podman machine -weight: 500;">start # Install (Fedora/RHEL) -weight: 600;">sudo -weight: 500;">dnf -weight: 500;">install podman # Install (Ubuntu) -weight: 600;">sudo -weight: 500;">apt -weight: 500;">install podman # Install (macOS) -weight: 500;">brew -weight: 500;">install podman podman machine init podman machine -weight: 500;">start # Install (Fedora/RHEL) -weight: 600;">sudo -weight: 500;">dnf -weight: 500;">install podman # Install (Ubuntu) -weight: 600;">sudo -weight: 500;">apt -weight: 500;">install podman # Install (macOS) -weight: 500;">brew -weight: 500;">install podman podman machine init podman machine -weight: 500;">start # Run a container podman run -d --name web -p 8080:80 nginx # List running containers podman ps # Exec into container podman exec -it web bash # Build from Dockerfile podman build -t myapp . # Push to registry podman push myapp -weight: 500;">docker.io/myuser/myapp # Run a container podman run -d --name web -p 8080:80 nginx # List running containers podman ps # Exec into container podman exec -it web bash # Build from Dockerfile podman build -t myapp . # Push to registry podman push myapp -weight: 500;">docker.io/myuser/myapp # Run a container podman run -d --name web -p 8080:80 nginx # List running containers podman ps # Exec into container podman exec -it web bash # Build from Dockerfile podman build -t myapp . # Push to registry podman push myapp -weight: 500;">docker.io/myuser/myapp # Create a pod podman pod create --name webapp -p 8080:80 -p 5432:5432 # Add containers to the pod podman run -d --pod webapp --name frontend nginx podman run -d --pod webapp --name db postgres:16 # Containers in the same pod share localhost # frontend can reach postgres at localhost:5432 # Generate Kubernetes YAML from pod podman generate kube webapp > webapp.yaml # Create a pod podman pod create --name webapp -p 8080:80 -p 5432:5432 # Add containers to the pod podman run -d --pod webapp --name frontend nginx podman run -d --pod webapp --name db postgres:16 # Containers in the same pod share localhost # frontend can reach postgres at localhost:5432 # Generate Kubernetes YAML from pod podman generate kube webapp > webapp.yaml # Create a pod podman pod create --name webapp -p 8080:80 -p 5432:5432 # Add containers to the pod podman run -d --pod webapp --name frontend nginx podman run -d --pod webapp --name db postgres:16 # Containers in the same pod share localhost # frontend can reach postgres at localhost:5432 # Generate Kubernetes YAML from pod podman generate kube webapp > webapp.yaml # Install -weight: 500;">pip -weight: 500;">install podman-compose # Use your existing -weight: 500;">docker-compose.yml podman-compose up -d podman-compose logs -f podman-compose down # Install -weight: 500;">pip -weight: 500;">install podman-compose # Use your existing -weight: 500;">docker-compose.yml podman-compose up -d podman-compose logs -f podman-compose down # Install -weight: 500;">pip -weight: 500;">install podman-compose # Use your existing -weight: 500;">docker-compose.yml podman-compose up -d podman-compose logs -f podman-compose down # No -weight: 600;">sudo needed! podman run --rm alpine whoami # Output: root (but it's mapped to your UID on the host!) # Check user namespace mapping podman unshare cat /proc/self/uid_map # No -weight: 600;">sudo needed! podman run --rm alpine whoami # Output: root (but it's mapped to your UID on the host!) # Check user namespace mapping podman unshare cat /proc/self/uid_map # No -weight: 600;">sudo needed! podman run --rm alpine whoami # Output: root (but it's mapped to your UID on the host!) # Check user namespace mapping podman unshare cat /proc/self/uid_map # Generate systemd -weight: 500;">service from container podman generate systemd --new --name web > ~/.config/systemd/user/web.-weight: 500;">service # Enable and -weight: 500;">start -weight: 500;">systemctl --user -weight: 500;">enable --now web.-weight: 500;">service # Container auto-starts on login, auto-restarts on crash # Generate systemd -weight: 500;">service from container podman generate systemd --new --name web > ~/.config/systemd/user/web.-weight: 500;">service # Enable and -weight: 500;">start -weight: 500;">systemctl --user -weight: 500;">enable --now web.-weight: 500;">service # Container auto-starts on login, auto-restarts on crash # Generate systemd -weight: 500;">service from container podman generate systemd --new --name web > ~/.config/systemd/user/web.-weight: 500;">service # Enable and -weight: 500;">start -weight: 500;">systemctl --user -weight: 500;">enable --now web.-weight: 500;">service # Container auto-starts on login, auto-restarts on crash # Start API socket podman system -weight: 500;">service --time=0 & # List containers via API -weight: 500;">curl --unix-socket /run/user/$(id -u)/podman/podman.sock \ http://localhost/v4.0.0/libpod/containers/json # Create container via API -weight: 500;">curl --unix-socket /run/user/$(id -u)/podman/podman.sock \ -X POST http://localhost/v4.0.0/libpod/containers/create \ -H 'Content-Type: application/json' \ -d '{"image": "nginx", "name": "webapi"}' # Start API socket podman system -weight: 500;">service --time=0 & # List containers via API -weight: 500;">curl --unix-socket /run/user/$(id -u)/podman/podman.sock \ http://localhost/v4.0.0/libpod/containers/json # Create container via API -weight: 500;">curl --unix-socket /run/user/$(id -u)/podman/podman.sock \ -X POST http://localhost/v4.0.0/libpod/containers/create \ -H 'Content-Type: application/json' \ -d '{"image": "nginx", "name": "webapi"}' # Start API socket podman system -weight: 500;">service --time=0 & # List containers via API -weight: 500;">curl --unix-socket /run/user/$(id -u)/podman/podman.sock \ http://localhost/v4.0.0/libpod/containers/json # Create container via API -weight: 500;">curl --unix-socket /run/user/$(id -u)/podman/podman.sock \ -X POST http://localhost/v4.0.0/libpod/containers/create \ -H 'Content-Type: application/json' \ -d '{"image": "nginx", "name": "webapi"}' - No daemon — each container is a child process, not managed by a central -weight: 500;">service - Rootless by default — containers run as your user, not as root - Pods — group containers like Kubernetes pods, locally - Docker-compatible — alias -weight: 500;">docker=podman works for 95% of commands