Convertidor de docker run a Compose
Pega uno o más comandos docker run y obtén un docker-compose.yml limpio con puertos, volúmenes, variables de entorno, políticas de reinicio, redes, health checks y límites de recursos. Cambia la dirección para convertir un archivo compose de nuevo en comandos docker run.
Última actualización:
Cómo usar Convertidor de docker run a Compose
- Pega tus comandos docker run en el cuadro de la izquierda, uno o varios. Los comandos de varias líneas con barras invertidas también sirven.
- Lee el archivo compose a la derecha. Se actualiza mientras escribes, con cada contenedor como un servicio.
- Revisa las notas debajo del resultado para ver los flags que se ignoraron o que requieren atención.
- Copia o descarga docker-compose.yml e inicia todo con
docker compose up -d. - ¿Quieres hacerlo al revés? Cambia a Compose → docker run, pega un archivo compose y obtén los comandos de shell equivalentes.
Flags de docker run y sus claves en compose
| docker run | docker-compose.yml | Ejemplo |
|---|---|---|
--name web | container_name (y el nombre del servicio) | container_name: web |
-p 8080:80 | ports | - "8080:80" |
-v data:/var/lib/x | volumes + volumes de nivel superior | - data:/var/lib/x |
-v ./src:/app:ro | volumes (bind mount) | - ./src:/app:ro |
--mount type=bind,… | volumes con sintaxis larga | type: bind, source, target |
-e KEY=value | environment | KEY: value |
--env-file .env | env_file | - .env |
--restart unless-stopped | restart | restart: unless-stopped |
--network mynet | networks + networks de nivel superior | - mynet |
--network host | network_mode | network_mode: host |
-w /app, -u 1000 | working_dir, user | user: "1000" |
--memory 512m --cpus 1.5 | mem_limit, cpus | mem_limit: 512m |
--health-cmd "…" | healthcheck.test | ["CMD-SHELL", "…"] |
--gpus all | deploy.resources.reservations.devices | capabilities: ["gpu"] |
-it | stdin_open + tty | tty: true |
| imagen y argumentos finales | image, command | command: ["npm", "start"] |
Comandos de docker compose de uso diario
| Comando | Qué hace |
|---|---|
docker compose up -d | Crea e inicia todos los servicios en segundo plano |
docker compose ps | Lista los contenedores del proyecto y su estado de salud |
docker compose logs -f api | Sigue los logs de un servicio |
docker compose pull && docker compose up -d | Actualiza las imágenes y recrea los contenedores que cambiaron |
docker compose exec db psql -U app | Ejecuta un comando dentro de un servicio en ejecución |
docker compose config | Valida el archivo y lo muestra con las variables resueltas |
docker compose down | Detiene y elimina contenedores y redes (añade -v para borrar también los volúmenes con nombre) |
Cosas que no se traducen una a una
- Los nombres llevan el prefijo del proyecto. Compose nombra las redes y los volúmenes
<project>_<name>. Para conectarte a datos o redes que creaste con docker run, decláralos conexternal: true. - Rutas relativas. En compose,
./dataes relativa al archivo compose. Con docker run, usa una ruta absoluta o$(pwd)/data. - Descubrimiento de servicios. Los servicios de compose se resuelven entre sí por nombre de servicio automáticamente. Con docker run necesitas una red definida por el usuario (el bridge predeterminado no tiene DNS).
- Orden de inicio.
depends_on(opcionalmente concondition: service_healthy) solo existe en compose. Si los ejecutas a mano, inicia primero las bases de datos. - Variables. Compose sustituye
${VAR}y${VAR:-default}a partir del shell y del archivo.envsituado junto al archivo compose. Un$literal debe escribirse como$$.
Preguntas frecuentes
¿Cómo convierto un comando docker run a docker compose?
Cada docker run se convierte en un servicio. La imagen va a image, --name a container_name, -p a ports, -v a volumes, -e a environment, --restart a restart y --network a networks. Pega el comando en esta herramienta para obtener el YAML automáticamente y luego ejecuta docker compose up -d en la carpeta donde está el archivo.
¿Sigue siendo necesaria la línea version en docker-compose.yml?
No. La Compose Specification que usa Docker Compose v2 ignora la clave version de nivel superior y las versiones más nuevas avisan de que está obsoleta, así que esta herramienta la omite. El archivo puede llamarse compose.yaml o docker-compose.yml.
¿Qué pasa con --rm y -d?
Compose no tiene equivalente de --rm para servicios de larga duración, así que se descarta con una nota; usa docker compose down para eliminar los contenedores. -d tampoco forma parte del archivo: se pasa al iniciar, como en docker compose up -d.
¿Por qué los volúmenes con nombre aparecen al final del archivo?
Compose exige que cada volumen con nombre usado por un servicio se declare bajo la clave volumes de nivel superior. Los bind mounts que empiezan por /, ./ o ~ son rutas del host y no necesitan declaración.
¿Mis contenedores mantendrán los mismos nombres de red y de volumen?
Compose añade a las redes y volúmenes que crea el nombre del proyecto como prefijo (normalmente el nombre de la carpeta), por ejemplo myapp_data. Para reutilizar los que creaste con docker run, márcalos con external: true o define un name explícito.
¿Los servicios pueden comunicarse entre sí por nombre?
Sí. Compose pone todos los servicios en una red predeterminada donde cada nombre de servicio es un nombre de host DNS, así que la app puede conectarse a db:5432. Con docker run a secas necesitas una red definida por el usuario para eso, y por eso la conversión inversa crea una.
¿Se envía mi comando a algún sitio?
No. El análisis y la conversión se ejecutan por completo en tu navegador. Las variables de entorno y los secretos de tus comandos nunca salen de tu computadora.
¿Se prueban todas las herramientas de FreeToolCabin para comprobar su calidad y precisión?
Sí. Cada herramienta del sitio pasa pruebas automáticas en navegadores reales para comprobar que el resultado es correcto y que no hay errores. Si encuentras un fallo o tienes una sugerencia, escríbenos a [email protected] y lo revisaremos.