Skip to content

Deploy Odoo 19 with Podman: Rootless Container Guide

DeployMonkey Team · March 23, 2026 8 min read

Why Podman for Odoo?

Podman is a daemonless container engine that runs containers as non-root users by default. Unlike Docker, Podman does not require a background daemon, making it more secure and suitable for environments where Docker is restricted (RHEL, government, enterprise).

Install Podman

# RHEL/Rocky/Alma Linux
sudo dnf install -y podman podman-compose

# Debian/Ubuntu
sudo apt install -y podman podman-compose

# Verify
podman --version
podman info

Rootless Odoo Setup

# Create dedicated user
sudo useradd -m odoo-podman
sudo loginctl enable-linger odoo-podman
sudo su - odoo-podman

# Pull Odoo image
podman pull docker.io/odoo:19
podman pull docker.io/postgres:16

# Create pod (shared network namespace)
podman pod create --name odoo-pod \
  -p 8069:8069 -p 8072:8072

Run with Podman Pod

# Start PostgreSQL in the pod
podman run -d --pod odoo-pod \
  --name odoo-db \
  -e POSTGRES_USER=odoo \
  -e POSTGRES_PASSWORD=odoo_pass \
  -e POSTGRES_DB=postgres \
  -v odoo-db-data:/var/lib/postgresql/data \
  postgres:16

# Start Odoo in the same pod
podman run -d --pod odoo-pod \
  --name odoo-app \
  -e HOST=localhost \
  -e USER=odoo \
  -e PASSWORD=odoo_pass \
  -v odoo-data:/var/lib/odoo \
  -v ./custom-addons:/mnt/extra-addons \
  -v ./odoo.conf:/etc/odoo/odoo.conf \
  odoo:19

Podman Compose

# podman-compose.yml (same syntax as Docker)
version: '3.8'
services:
  db:
    image: postgres:16
    environment:
      POSTGRES_USER: odoo
      POSTGRES_PASSWORD: odoo_pass
    volumes:
      - db-data:/var/lib/postgresql/data
  odoo:
    image: odoo:19
    depends_on:
      - db
    ports:
      - "8069:8069"
      - "8072:8072"
    environment:
      HOST: db
      USER: odoo
      PASSWORD: odoo_pass
    volumes:
      - odoo-data:/var/lib/odoo
      - ./custom:/mnt/extra-addons
volumes:
  db-data:
  odoo-data:

# Run with:
podman-compose up -d

Systemd Integration

# Generate systemd unit files from running pod
podman generate systemd --new --name odoo-pod \
  --files --restart-policy=always

# Install as user service
mkdir -p ~/.config/systemd/user/
cp *.service ~/.config/systemd/user/
systemctl --user daemon-reload
systemctl --user enable pod-odoo-pod.service

# Auto-start on boot (requires linger)
systemctl --user start pod-odoo-pod.service

Podman vs Docker Key Differences

# Podman advantages for Odoo:
# - No root daemon (security)
# - Pods group containers (like k8s pods)
# - Systemd integration (auto-restart)
# - SELinux compatible by default
# - Drop-in Docker CLI replacement

# Watch out for:
# - Volume permission differences (UID mapping)
# - Network namespace behavior in pods
# - Some Docker Compose features missing
# - Container image compatibility (usually fine)

DeployMonkey Alternative

DeployMonkey handles container orchestration for you. Deploy Odoo with proper networking, volumes, and monitoring without managing Podman or Docker directly.