MCPcopy Index your code
hub / github.com/containers/podman-compose

github.com/containers/podman-compose @v1.6.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release v1.6.0 ↗ · + Follow
790 symbols 3,086 edges 159 files 107 documented · 14% updated 8d agov1.6.0 · 2026-06-03★ 6,141340 open issues
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Podman Compose

Tests

An implementation of Compose Spec with Podman backend. This project focuses on:

  • rootless
  • daemon-less process model, we directly execute podman, no running daemon.

This project only depends on:

  • podman
  • podman dnsname plugin: It is usually found in the podman-plugins or podman-dnsname distro packages, those packages are not pulled by default and you need to install them. This allows containers to be able to resolve each other if they are on the same CNI network. This is not necessary when podman is using netavark as a network backend.
  • Python 3.9 or newer
  • PyYAML
  • python-dotenv

And it's formed as a single Python file script that you can drop into your PATH and run.

References:

Alternatives

As in this article you can setup a podman.socket and use unmodified docker-compose that talks to that socket but in this case you lose the process-model (ex. docker-compose build will send a possibly large context tarball to the daemon)

For production-like single-machine containerized environment consider

For the real thing (multi-node clusters) check any production OpenShift/Kubernetes distribution like OKD.

Versions

If you have legacy version of podman (before 3.1.0) you might need to stick with legacy podman-compose 0.1.x branch. The legacy branch 0.1.x uses mappings and workarounds to compensate for rootless limitations.

Modern podman versions (>=3.4) do not have those limitations, and thus you can use latest and stable 1.x branch.

If you are upgrading from podman-compose version 0.1.x then we no longer have global option -t to set mapping type like hostnet. If you desire that behavior, pass it the standard way like network_mode: host in the YAML.

Installation

Pip

Install the latest stable version from PyPI:

pip3 install podman-compose

pass --user to install inside a regular user's home without being root.

Or latest development version from GitHub:

pip3 install https://github.com/containers/podman-compose/archive/main.tar.gz

Package repositories

podman-compose is available from the following package repositories:

Debian:

sudo apt install podman-compose

Fedora (starting from f31) repositories:

sudo dnf install podman-compose

Homebrew:

brew install podman-compose

Generate binary using docker/podman locally

This script will download the repo, generate the binary using this Dockerfile, and place the binary in the directory where you called this script.

sh -c "$(curl -sSL https://raw.githubusercontent.com/containers/podman-compose/main/scripts/download_and_build_podman-compose.sh)"

Manual

curl -o /usr/local/bin/podman-compose https://raw.githubusercontent.com/containers/podman-compose/main/podman_compose.py
chmod +x /usr/local/bin/podman-compose

or inside your home

curl -o ~/.local/bin/podman-compose https://raw.githubusercontent.com/containers/podman-compose/main/podman_compose.py
chmod +x ~/.local/bin/podman-compose

Tests

podman-compose is tested via unit and integration tests.

Unit tests can be run via the following:

python3 -m unittest discover tests/unit

Integration tests can be run via the following:

python3 -m unittest discover tests/integration

Contributing guide

If you are a user or a developer and want to contribute please check the CONTRIBUTING section

Core symbols most depended-on inside this repo

container_to_args
called by 68
podman_compose.py
run
called by 39
podman_compose.py
get_net_args
called by 20
podman_compose.py
container_to_build_args
called by 19
podman_compose.py
norm_as_list
called by 18
podman_compose.py
output
called by 16
podman_compose.py
_format_stream
called by 13
podman_compose.py
get_network_create_args
called by 12
podman_compose.py

Shape

Method 417
Function 220
Class 113
Route 40

Languages

Python100%
TypeScript1%

Modules by API surface

podman_compose.py198 symbols
tests/unit/test_container_to_args.py57 symbols
tests/integration/in_pod/test_podman_compose_in_pod.py28 symbols
tests/unit/test_get_net_args.py23 symbols
tests/unit/test_container_to_build_args.py23 symbols
tests/unit/test_container_to_args_secrets.py20 symbols
tests/integration/test_utils.py20 symbols
tests/integration/pod_args/test_podman_compose_pod_args.py20 symbols
tests/unit/test_compose_run_log_format.py18 symbols
tests/integration/deps/test_podman_compose_deps.py16 symbols
tests/unit/test_pull_image.py14 symbols
tests/unit/test_get_network_create_args.py13 symbols

Dependencies from manifests, versioned

express4.16.4 · 1×
nodemon2.0.14 · 1×
redis3.1.2 · 1×
pyyaml

Datastores touched

(mysql)Database · 1 repos

For agents

$ claude mcp add podman-compose \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact