Ir al contenido principal

Podman Compose: Una alternativa sin raíces a Docker Compose

Podman Compose es una herramienta basada en Python que lee archivos Docker Compose y ejecuta aplicaciones multicontensor utilizando la arquitectura sin raíz y sin demonios de Podman para entornos de desarrollo centrados en la seguridad.
Actualizado 9 feb 2026  · 12 min leer

Supongamos que tienes un archivo docker-compose.yml que lleva meses funcionando. Pero ahora, se supone que debes usar Podman en lugar de Docker, y no estás seguro de si necesitas editar el archivo o empezar desde cero. Tu entorno de desarrollo local depende de ese archivo Compose, y reconstruir toda tu configuración no es precisamente algo para lo que tengas tiempo.

La buena noticia es que Podman Compose te permite ejecutar archivos Compose existentes con Podman en lugar de Docker. Es una capa de compatibilidad basada en Python que traduce tus definiciones de Compose a comandos de Podman, para que puedas seguir utilizando el flujo de trabajo multicontensor con el que estás familiarizado.

En este artículo, te mostraré qué es Podman Compose, cómo instalarlo y cómo ejecutar tu primera aplicación multicontensor con él. Si eres nuevo en algunos de losconceptos de que se tratan en este artículo, inscríbete en nuestro Curso sobre conceptos de contenedorización y virtualización para comprender los conceptos básicos.

¿Qué es Podman Compose?

Podman Compose es una herramienta basada en Python que lee tus archivos docker-compose.yml y los traduce a comandos Podman.

Sigues escribiendo un archivo archivo Docker Compose con servicios, redes y volúmenes. Podman Compose analiza ese archivo y ejecuta los comandos equivalentes de podman para iniciar tus contenedores. Realiza el trabajo de traducción por ti, por lo que no tienes que convertir manualmente la sintaxis de Compose en comandos de la CLI de Podman.

Es importante señalar que Podman Compose no es un sustituto directo de Docker Compose.

Es una capa de compatibilidad. Algunas funciones de Docker Compose funcionan desde el primer momento, otras necesitan ajustes y unas pocas no funcionan en absoluto. La herramienta busca la compatibilidad, pero no reproduce todos y cada uno de los comportamientos de Docker Compose.

Aquí hay otra forma de verlo: Docker Compose se comunica directamente con el demonio Docker. Podman Compose se comunica con la CLI de Podman, que luego gestiona los contenedores sin un demonio. El resultado final es similar, pero la mecánica subyacente es diferente.

Esto significa que puedes reutilizar la mayoría de tus archivos Compose existentes, pero tendrás que comprender dónde se encuentran las diferencias.

¿Por qué utilizar Podman Compose?

Podman Compose te permite ejecutar aplicaciones multicontensor sin instalar Docker.

En comparación con Docker, obtienes contenedores sin root de forma predeterminada. Podman ejecuta contenedores sin necesidad de privilegios de root. En pocas palabras, hay menos riesgo si un contenedor se ve comprometido. Docker requiere que el demonio se ejecute como root, incluso si estás ejecutando contenedores sin root sobre él.

Esto hace que Podman Compose sea más adecuado para entornos centrados en la seguridad. Si trabajas en servidores Linux bloqueados o entornos en los que no se permite ejecutar un demonio de nivel raíz, Podman Compose te ofrece el flujo de trabajo multicontensor que necesitas.

También es útil para el desarrollo y las pruebas. Puedes crear entornos locales, probar configuraciones de contenedores y validar tus archivos Compose sin necesidad de tener instalado Docker. Es ideal para implementaciones ligeras en las que no se necesita una orquestación completa.

Sin embargo, cabe señalar que Podman Compose no es ideal para todas las situaciones.

Si estás ejecutando cargas de trabajo de producción a gran escala, te recomendamos utilizar Kubernetes o Docker Swarm. Podman Compose también tiene un soporte más débil en macOS y Windows en comparación con Linux, por lo que tu experiencia de desarrollo multiplataforma no será tan fluida. Y si tu equipo ya ha invertido en el ecosistema Docker con complementos y herramientas personalizados, cambiar a Podman Compose significa reconstruir partes de ese flujo de trabajo.

En conclusión, utiliza Podman Compose cuando necesites contenedores sin root, entornos que prioricen la seguridad o una configuración de desarrollo sin Docker.

Instalación de Podman Compose

Podman Compose funciona mejor en Linux, donde Podman se ejecuta de forma nativa.

Puedes instalarlo en macOS y Windows, pero primero tendrás que ejecutar Podman dentro de una máquina virtual. Esto añade complejidad y no es tan fluido como la experiencia con Linux. Si utilizas macOS o Windows, ten en cuenta que habrá pasos de configuración adicionales y posibles problemas de red.

Instalación en Linux

La forma más fácil de instalar Podman Compose es a través de pip.

pip install podman-compose

Instalación de Podman compose en Linux

Instalación de Podman compose en Linux

Esto instala la última versión de PyPI. No tienes que preocuparte por la gestión de versiones de Python: si tienes instalado Python 3, ya estás listo para empezar.

Algunas distribuciones de Linux también incluyen Podman Compose en sus repositorios. En Fedora, RHEL y CentOS, puedes utilizar:

sudo dnf install podman-compose

En sistemas basados en Ubuntu y Debian, ejecuta lo siguiente:

sudo apt install podman-compose

Las versiones del gestor de paquetes suelen ir por detrás de PyPI, por lo que es posible que no puedas disfrutar de las últimas funciones de inmediato.

Instalación en macOS y Windows

En macOS y Windows, primero tendrás que configurar Podman Desktop o utilizar podman machine para crear una máquina virtual Linux. Una vez que esté en funcionamiento, instala Podman Compose con pip dentro de ese entorno.

Así que el primer paso es conectarse a la máquina:

podman machine ssh

Acceso SSH a la máquina virtual Podman

Acceso SSH a la máquina virtual Podman

Dado que la máquina virtual está basada en Fedora, puedes ejecutar este comando para instalar Podman Compose:

sudo dnf install podman-compose

Instalación de Podman Compose

Instalación de Podman Compose

Este proceso de dos pasos significa que no estás ejecutando Podman Compose directamente en tu sistema operativo host, sino que lo estás ejecutando dentro de la máquina virtual Linux que crea Podman.

Verificación de la instalación

Ejecuta este comando para comprobar que Podman Compose se ha instalado correctamente:

podman-compose --version

Verificación de la instalación de Podman Compose

Verificación de la instalación de Podman Compose

Deberías ver el número de versión impreso en el terminal. Si recibes un error de «comando no encontrado», asegúrate de que el directorio de Python bin se encuentra en tu PATH.

Eso es todo lo que necesitas para empezar a utilizar Podman Compose.

Ejecutar un archivo Compose con Podman Compose

Ya tienes instalado Podman Compose. Ahora te voy a enseñar cómo ejecutar una aplicación real.

Usando un archivo Docker Compose existente

Podman Compose lee archivos estándar docker-compose.yml. No es necesario cambiar el nombre ni el formato.

Aquí tienes una sencilla aplicación FastAPI definida en un archivo Compose:

services:
  web:
    image: python:3.14-slim
    container_name: fastapi-app
    working_dir: /src
    volumes:
      - ./src:/src
    ports:
      - "8000:8000"
    command: bash -c "pip install fastapi uvicorn && uvicorn main:app --host 0.0.0.0 --port 8000"

Con el código de la aplicación en src/main.py:

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def read_root():
    return {"message": "Hello from FastAPI"}

@app.get("/health")
def health_check():
    return {"status": "healthy"}

La mayoría de las funciones de Docker Compose funcionan de forma inmediata con Podman Compose. Esto incluye:

  • Extracción de imágenes y creación de contenedores
  • Asignaciones de puertos
  • Montajes de volúmenes (tanto volúmenes con nombre como montajes vinculados)
  • Variables de entorno
  • Redes básicas entre servicios

Pero algunas funciones necesitan ajustes. Si tu archivo Compose utiliza complementos específicos de Docker, controladores de red personalizados o argumentos de compilación avanzados, es probable que tengas que modificar esas secciones.

Podman Compose también gestiona las redes de forma diferente: los servicios no se resuelven automáticamente entre sí por nombre de servicio, como lo hace Docker Compose.

Comandos básicos de Podman Compose

Ahora puedes iniciar tus servicios con este comando:

podman-compose up

Esto extrae imágenes, crea contenedores e inicia todo lo definido en tu archivo Compose. Añade -d para ejecutar en modo independiente si no deseas que los registros se transmitan a tu terminal.

Salida de Podman

Salida de Podman

Ahora puedes abrir la aplicación en el puerto 8000 de tu máquina (o en una instancia remota de Ubuntu, como la que yo estoy utilizando). Verás lo siguiente:

Aplicación FastAPI ejecutándose a través de Podman

Aplicación FastAPI ejecutándose a través de Podman

Para detener los servicios en ejecución, ejecuta lo siguiente:

podman-compose down

Esto detiene y elimina los contenedores. Los volúmenes persisten a menos que añadas « --volumes » para eliminarlos también.

Para comprobar los registros de servicio, ejecuta este comando:

podman-compose logs

Añade -f para seguir los registros en tiempo real, o especifica un nombre de servicio para ver los registros solo de ese contenedor.

Para limpiar todo, incluidos contenedores, redes y volúmenes, ejecuta lo siguiente:

podman-compose down --volumes

Los comandos reflejan la sintaxis de Docker Compose, por lo que si ya estás familiarizado con docker-compose, te sentirás como en casa.

Podman Compose frente a Docker Compose y otros

Podman Compose y Docker Compose persiguen el mismo objetivo, pero funcionan de manera diferente en segundo plano. Déjame explicarte cómo.

Ejecución sin raíz

Docker Compose requiere que el demonio Docker se ejecute como root. Incluso cuando configuras contenedores sin raíz, el propio demonio necesita privilegios elevados. Podman Compose se ejecuta íntegramente sin acceso root de forma predeterminada. Tus contenedores se inician como usuario, no como servicio del sistema, lo que reduce las opciones de ataque y hace que Podman Compose sea más seguro en entornos multiusuario.

Comportamiento en red

Docker Compose crea una red puente predeterminada para tus servicios. Los contenedores pueden comunicarse entre sí automáticamente mediante el nombre del servicio.

Podman Compose utiliza en su lugarredes basadas en pods. Todos los contenedores de tu archivo Compose se agrupan en un único pod de Podman y comparten el mismo espacio de nombres de red. Esto significa que los contenedores se comunican a través de un localhost, en lugar de nombres de servicio, lo que puede sorprender a los usuarios de Docker.

Si tu aplicación espera acceder a una base de datos en db:5432, deberás cambiarla a localhost:5432 cuando se ejecute con Podman Compose.

Agrupación basada en pods

Docker Compose gestiona contenedores individuales. Podman Compose crea unpod e , que es una agrupación inspirada en Kubernetes en la que los contenedores comparten la red y pueden compartir el almacenamiento. Este modelo de pod alinea Podman Compose con los patrones de Kubernetes, lo que facilita la migración posterior de las cargas de trabajo si necesitas orquestación.

Integración con systemd

Podman se integra con systemd para gestionar contenedores como servicios del sistema. Puedes generar archivos de unidad systemd a partir de contenedores en ejecución y gestionarlos como cualquier otro servicio Linux. Docker no ofrece integración nativa con systemd a nivel de contenedor.

Otras opciones

Si Podman Compose no se ajusta a tus necesidades, tienes estas alternativas:

  • Podman nativo con systemd te permite gestionar contenedores como servicios sin necesidad de archivos Compose.
  • Kubernetes te ofrece una orquestación completa si estás ejecutando cargas de trabajo de producción a gran escala, aunque es mucho más pesado que las herramientas del estilo Compose.

Podman Compose se encuentra a medio camino entre los comandos simples de contenedores y la orquestación completa. Te ofrece flujos de trabajo con múltiples contenedores sin necesidad del demonio de Docker.

Redes y volúmenes en Podman Compose (qué hay de diferente)

Los usuarios de Docker que se pasan a Podman Compose suelen quejarse de dos cosas: las redes y los volúmenes. En esta sección, repasaré las diferencias.

Comunicación entre servicios

En Docker Compose, te conectas a otros servicios mediante su nombre de servicio. Si tienes un servicio web y un servicio de base de datos llamado db, tu aplicación se conecta a db:5432.

Podman Compose coloca todos los servicios en un único pod. Los contenedores del mismo pod comparten un espacio de nombres de red, lo que significa que todos usan localhost. Tu cadena de conexión a la base de datos cambia de db:5432 a localhost:5432.

Esto pilla a la gente desprevenida. Tu aplicación se inicia, intenta conectarse a db:5432 y falla porque ese nombre de host no se resuelve. Tendrás que actualizar tus cadenas de conexión o variables de entorno para utilizar localhost en su lugar.

Redes predeterminadas

Docker Compose crea una red puente para tus servicios. Cada contenedor obtiene su propia dirección IP en esa red, y el resolutor DNS de Docker se encarga de las búsquedas de nombres de servicio.

Podman Compose no crea redes separadas de forma predeterminada. El modelo pod significa que los contenedores comparten la red en un nivel inferior. Si defines redes personalizadas en tu archivo Compose, Podman Compose intentará crearlas, pero es posible que el comportamiento no coincida exactamente con el de Docker.

Comportamiento del montaje de volúmenes y enlaces

Los volúmenes y las monturas vinculadas funcionan prácticamente igual en Docker Compose y Podman Compose. Tú los defines en tu archivo Compose y Podman los crea.

Pero hay un problema con los permisos.

Podman se ejecuta sin privilegios de root de forma predeterminada, por lo que la propiedad y los permisos de los archivos pueden comportarse de manera diferente. Un montaje vinculado que funciona correctamente en Docker puede dar lugar a errores de permiso en Podman porque el usuario del contenedor no coincide con el UID del usuario del host.

También notarás que las ubicaciones del volumen son diferentes. Docker almacena los volúmenes en /var/lib/docker/volumes/, mientras que Podman los almacena en ~/.local/share/containers/storage/volumes/ para contenedores sin root.

Las soluciones son fáciles de implementar si sabes lo que está pasando. Así que solo tienes que ajustar las cadenas de conexión para la red y comprobar los permisos de los archivos para detectar posibles problemas de volumen.

Limitaciones comunes y dificultades

Podman Compose funciona bien para configuraciones básicas de múltiples contenedores, pero tiene limitaciones que debes conocer antes de comprometerte con él.

Funciones de redacción no compatibles

No todas las funciones de Docker Compose se traducen a Podman Compose. Los contextos de compilación con argumentos complejos suelen fallar o comportarse de forma diferente. Los complementos y extensiones de Docker Compose no funcionarán en absoluto. Funciones como el paso directo de GPU, las comprobaciones de estado avanzadas y algunos modos de red no funcionan o requieren soluciones alternativas.

Si tu archivo Compose utiliza intensivamente las funciones de la versión 3.x de docker-compose.yml, prepárate para un proceso de prueba y error.

Expectativas de red que difieren de Docker

Los servicios no se comunican por el nombre del servicio, sino que utilizan localhost. Esto inutiliza las aplicaciones que codifican de forma rígida los nombres de los servicios en las cadenas de conexión.

Las redes puente personalizadas no se comportan de la misma manera que Docker. La resolución DNS funciona de manera diferente debido al modelo de pod.

Prevé dedicar algo de tiempo a actualizar las configuraciones y las variables de entorno para que se ajusten al modelo de red de Podman, pero es algo que solo hay que hacer una vez.

Limitaciones de la plataforma en macOS/Windows

Podman Compose funciona mejor en Linux. En macOS y Windows, todo se ejecuta dentro de una máquina virtual Linux, lo que añade capas de complejidad. La sincronización de archivos entre tu host y la máquina virtual puede ser más lenta. La conexión en red entre tu host y los contenedores requiere una configuración adicional.

Si tu equipo utiliza máquinas macOS o Windows para el desarrollo, Docker Compose suele ser la opción más fluida.

Madurez de las herramientas y deficiencias del ecosistema

Podman Compose es más reciente que Docker Compose. La comunidad es más pequeña, por lo que encontrar respuestas a problemas específicos requiere más investigación. Las herramientas e integraciones de terceros se crean primero para Docker y, en segundo lugar, para Podman (si es que se crean). El soporte IDE y las herramientas GUI están por detrás del ecosistema de Docker.

No encontrarás tantas respuestas en Stack Overflow ni incidencias en GitHub sobre problemas con Podman Compose.

Estas limitaciones no hacen que Podman Compose sea inutilizable, pero son algo que hay que tener en cuenta antes de comprometerse. Los usuarios de Docker Compose no tienen que lidiar con estas fricciones en absoluto.

Prácticas recomendadas para usar Podman Compose

A continuación te explicamos cómo evitar los problemas más comunes de Podman Compose.

  • Empieza con archivos Compose sencillos. No migres primero tu configuración de Docker más compleja. Comienza con una aplicación de servicio único, comprueba que funciona y, a continuación, añade algunas más. Esto te permite aislar los problemas a medida que surgen.

  • Prueba las redes sin raíz desde el principio. Inicia una aplicación multiservicio y comprueba que los contenedores pueden comunicarse a través de localhost. Cambia tus cadenas de conexión de nombres de servicio a localhost. Si la conexión de red no funciona como esperas, te darás cuenta inmediatamente.

  • Sé explícito con los volúmenes y los puertos. No confíes en los valores predeterminados. Especifica las rutas completas para los montajes vinculados. Define las asignaciones de puertos. Establece los permisos de archivo explícitamente si estás montando directorios del host. El modelo sin raíz de Podman implica que las suposiciones que funcionaban en Docker podrían fallar aquí.

  • Utiliza Podman Compose principalmente para el desarrollo y la producción ligera. Funciona bien en entornos de desarrollo locales y pequeñas implementaciones. Para la producción a gran escala, necesitarás Kubernetes u otra plataforma de orquestación. Podman Compose no está diseñado para clústeres de alta disponibilidad ni mallas de servicios complejas.

Conclusión

Podman Compose te ofrece una forma práctica de ejecutar aplicaciones multicontenedor con Podman en lugar de Docker. Lee tus archivos Compose existentes y los traduce a comandos Podman, por lo que no es necesario que aprendas un flujo de trabajo completamente nuevo. Pero no es un clon perfecto de Docker Compose. Las redes funcionan de manera diferente, algunas funciones no son compatibles y tendrás que ajustar las cadenas de conexión y las configuraciones para que se adapten al modelo basado en pods de Podman.

Por último, te recomiendo que leas sobre las diferencias entre Docker y Podman para obtener más información sobre sus respectivos enfoques arquitectónicos y compatibilidad.


Dario Radečić's photo
Author
Dario Radečić
LinkedIn
Científico de Datos Senior con base en Croacia. Top Tech Writer con más de 700 artículos publicados, generando más de 10M de visitas. Autor del libro Automatización del aprendizaje automático con TPOT.

Preguntas frecuentes sobre Docker Compose

¿Qué es Podman Compose?

Podman Compose es una herramienta basada en Python que lee archivos Docker Compose y los traduce a comandos Podman. Te permite ejecutar aplicaciones multicontenedor utilizando Podman en lugar de Docker, lo que te ofrece el mismo flujo de trabajo de Compose sin necesidad de un demonio ni privilegios de root.

¿Puedes usar archivos Docker Compose con Podman Compose?

Sí, Podman Compose lee archivos estándar docker-compose.yml. La mayoría de las funciones básicas de Docker Compose funcionan desde el primer momento, aunque tendrás que ajustar las cadenas de conexión de los nombres de servicio a localhost debido al modelo de red basado en pods de Podman.

¿Cuál es la principal diferencia entre Podman Compose y Docker Compose?

Podman Compose se ejecuta sin root de forma predeterminada y no requiere un demonio, mientras que Docker Compose necesita que el demonio Docker se ejecute como root. Podman Compose también utiliza redes basadas en pods, en las que los contenedores comparten un nombre de host único ( localhost), mientras que Docker Compose asigna a cada servicio su propio nombre de host.

¿Por qué tus servicios no se conectan cuando utilizas Podman Compose?

Podman Compose coloca todos los servicios en un único pod que comparte un espacio de nombres de red, de modo que los contenedores se comunican a través de localhost en lugar de nombres de servicio. Tendrás que cambiar las cadenas de conexión como db:5432 por localhost:5432 en las configuraciones de tu aplicación.

¿Funciona Podman Compose en macOS y Windows?

Sí, pero primero tendrás que ejecutar Podman dentro de una máquina virtual Linux utilizando Podman Desktop o podman machine. Esto añade complejidad en comparación con Linux, donde Podman se ejecuta de forma nativa, y es posible que se produzcan sincronizaciones de archivos más lentas y problemas de red.

Temas

Aprende con DataCamp

Curso

Introducción a TensorFlow en Python

4 h
55.4K
Aprende los fundamentos de las redes neuronales y cómo construir modelos de aprendizaje profundo con TensorFlow.
Ver detallesRight Arrow
Iniciar curso
Ver másRight Arrow
Relacionado

blog

Las 9 mejores alternativas a Anaconda para la gestión del entorno Python

Esta guía concisa y fácil de seguir te ayudará a descubrir las mejores alternativas a Anaconda y a encontrar la herramienta adecuada para tus proyectos en Python.
Kurtis Pykes 's photo

Kurtis Pykes

13 min

Tutorial

Cómo instalar y configurar MySQL en Docker

Aprende a instalar y configurar la base de datos MySQL dentro de contenedores Docker. El tutorial incluye conceptos como conectarse a servidores MySQL, ejecutar clientes MySQL para conectarse a contenedores, etc.
Bex Tuychiev's photo

Bex Tuychiev

Tutorial

Git Prune: Qué es la poda Git y cómo usarla

La poda Git es un comando Git que elimina del repositorio los objetos que ya no son accesibles desde ninguna confirmación o rama, ayudando a liberar espacio en disco.

Tutorial

21 herramientas esenciales de Python

Conozca las herramientas esenciales de Python para el desarrollo de software, raspado y desarrollo web, análisis y visualización de datos y aprendizaje automático.
Abid Ali Awan's photo

Abid Ali Awan

Tutorial

Una Introducción al Subproceso Python: Conceptos básicos y ejemplos

Explora nuestra guía paso a paso para ejecutar comandos externos utilizando el módulo de subprocesos de Python, completa con ejemplos.
Moez Ali's photo

Moez Ali

Tutorial

Tres métodos para convertir un script de Python en un archivo EXE

Aprende qué es un archivo ejecutable y cómo convertir un script de Python en un archivo .exe utilizando PyInstaller, Nuitka y auto-py-to-exe.
Kurtis Pykes 's photo

Kurtis Pykes

Ver másVer más