BrowserTools
Inicio / Conversores / Docker run a Compose

Docker run a Compose

Convierte un comando docker run en un archivo docker-compose.yml listo para usar.

Cargando Docker run a Compose… Si no ocurre nada, activa JavaScript.

La mayoría de los proyectos empiezan con una línea docker run copiada de un README y acaban siendo un muro de opciones que nadie quiere volver a escribir. Pega ese comando aquí y esta herramienta lo reescribe como un fichero docker-compose.yml, asociando cada opción reconocida a la clave correspondiente de Compose: -p pasa a ports, -v pasa a volumes, -e pasa a environment, --restart pasa a restart, y así con unas setenta opciones, incluidas las comprobaciones de salud, los límites de recursos, los controladores de registro, las capacidades, los ulimits y las reservas de GPU.

Preguntas frecuentes

¿Se envía mi comando docker run a algún servidor?
No. El analizador y el generador de YAML son JavaScript puro que se ejecuta en tu navegador, y la página no hace ninguna petición de red durante la conversión. Los comandos suelen contener contraseñas, tokens o nombres de registros privados, así que esto importa: puedes pegar un comando de producción y nada se sube, registra ni almacena.
¿Qué opciones de docker run admite?
Unas setenta, entre ellas las más habituales (--name, -p, -v, -e, --restart, --network, -w, -u, --entrypoint, --hostname), los límites de recursos (--memory, --cpus, --pids-limit, --shm-size, --ulimit), las opciones de seguridad (--cap-add, --cap-drop, --security-opt, --privileged, --read-only), la familia de healthcheck, --log-driver con --log-opt, --mount, --tmpfs, --sysctl, --device y --gpus. La lista completa está en la tabla de referencia de la página, y todo lo que no se reconoce aparece en las Notas en lugar de desaparecer sin aviso.
¿Por qué no aparece -d en el fichero generado?
Ejecutar en segundo plano no es una propiedad del servicio, es la forma de arrancarlo. Compose lo pone todo en segundo plano cuando usas docker compose up -d, así que la opción no tiene clave en el fichero. Lo mismo ocurre con --rm, que corresponde a docker compose down, y con opciones de conexión al terminal como -a y --detach-keys.
¿Necesito la clave version al principio del fichero?
No, y por eso está desactivada por defecto. La Compose Specification la eliminó, y las versiones recientes de Docker Compose muestran un aviso cuando la encuentran. Activa la opción solo si todavía usas el antiguo docker-compose v1 en Python, que sí espera un campo version.
¿Qué ocurre con los volúmenes y las redes con nombre?
Un montaje cuyo origen no es una ruta, como -v pgdata:/var/lib/postgresql/data, es un volumen con nombre, así que pgdata se añade a la sección volumes de nivel superior. Las redes con nombre pasadas con --network se añaden a la sección networks marcadas como external, dando por hecho que ya existen gracias a tu docker network create. Quita external: true si prefieres que Compose las cree junto con el proyecto.
¿Puedo convertir más de un contenedor a la vez?
Sí. Pega varios comandos docker run, uno por línea o encadenados con && o ;, y cada uno se convierte en un servicio. El nombre del servicio sale de --name cuando existe y, si no, del nombre de la imagen, y los repetidos reciben un sufijo numérico. Es la forma más rápida de convertir un script de arranque de una aplicación y su base de datos en un único fichero Compose.
¿Por qué se escriben los puertos entre comillas?
Porque en YAML 1.1 un 22:22 sin comillas se lee como un número sexagesimal, la trampa clásica de quien empieza con Compose. Las comillas mantienen el valor como texto y la asignación intacta. El resto de valores solo llevan comillas cuando hace falta, para que el resultado siga siendo legible.
¿Entiende --mount y las comprobaciones de salud?
Sí. Una especificación --mount se reescribe con la sintaxis larga de volumen con type, source, target y read_only, que es lo que Compose espera para los montajes bind y tmpfs. Las opciones --health-cmd, --health-interval, --health-timeout, --health-retries y --health-start-period se reúnen en un bloque healthcheck, con el comando envuelto en CMD-SHELL salvo que ya empiece por CMD.
¿Cómo ejecuto el fichero una vez generado?
Guárdalo como docker-compose.yml (el botón de descarga lo hace por ti), abre un terminal en esa carpeta y ejecuta docker compose up -d. Compruébalo antes con docker compose config, que valida el fichero y lo imprime con todo resuelto. Revisa la sección de Notas de esta página antes de ejecutar nada en producción, porque algunas opciones no tienen equivalente y pueden requerir una decisión manual.

Acerca de Docker run a Compose

El conversor lee el comando como lo haría un intérprete de comandos. Las continuaciones de línea con barra invertida, las comillas simples y dobles, las opciones cortas con el valor pegado como -p8080:80, las opciones agrupadas como -itd y la forma --opcion=valor se tratan todas, así que puedes pegar un comando tal cual aparece en la documentación, sin limpiarlo antes. Pega varios comandos, uno por línea o unidos con &&, y cada uno se convierte en un servicio del mismo fichero. Los volúmenes y las redes con nombre que usan esos servicios se recogen y se declaran en las secciones volumes y networks de nivel superior, y los puertos se escriben entre comillas para que un valor como 22:22 no se interprete como un número sexagesimal por el analizador de YAML.

Las opciones que solo tienen sentido al arrancar un contenedor no encajan en un fichero Compose, y la herramienta te lo dice en lugar de descartarlas en silencio: -d se sustituye por docker compose up -d, --rm por docker compose down, y opciones como --cidfile o --detach-keys aparecen en las Notas con una explicación breve. Todo se ejecuta en tu navegador, sin llamadas al servidor y sin bibliotecas externas, de modo que los comandos con contraseñas, nombres de registros privados o nombres internos de imágenes nunca salen de la página. Copia el resultado o descárgalo como docker-compose.yml y ejecuta docker compose up -d en esa misma carpeta.

Compose empezó llamándose Fig

Antes de Docker Compose existió Fig, una pequeña herramienta en Python publicada en 2013 por Orchard Laboratories. Fig introdujo la idea de que una aplicación con varios contenedores debía describirse en un único fichero YAML y arrancarse con un solo comando, en una época en la que lo normal era un script de shell lleno de líneas docker run. Docker compró Orchard en 2014 y Fig pasó a llamarse docker-compose al año siguiente, conservando el formato del fichero casi sin cambios.

Después el formato vivió una década de cambios. La versión 1 ni siquiera tenía claves de nivel superior, la versión 2 añadió services, volumes y networks, y la versión 3 la moldeó Docker Swarm, razón por la que claves como deploy siguen apareciendo en ficheros que nunca verán un swarm. La numeración terminó con la Compose Specification, que unió las ramas 2 y 3 y dejó obsoleto el campo version.

La reescritura de Python a Go en Compose V2 cambió también la forma de invocarlo: docker-compose con guion pasó a ser docker compose, un subcomando de la CLI de Docker. El antiguo binario independiente llegó al final de su vida útil en julio de 2023, así que si un tutorial todavía te dice que añadas version: '3.8' al principio del fichero, está escrito para una herramienta que Docker ya no distribuye.

Apoyar