Del comando a una configuración reutilizable

Convertir docker run a Compose

Deja de reconstruir el arranque a partir del historial del terminal. Guarda puertos, variables y volúmenes en una configuración Compose que puedas revisar y reutilizar.

docker runcompose.yaml
Conversión en el navegador
01

Pega un solo comando. Se admiten comillas y continuaciones con barra inversa. El resultado se actualiza al escribir.

02

compose.yaml

services:
  web:
    image: "nginx:alpine"
    container_name: "web"
    ports:
      - "8080:80"
    volumes:
      - "./html:/usr/share/nginx/html:ro"
    restart: "unless-stopped"
    network_mode: "bridge"

5 opciones · 1 servicioYAML

Antes de arrancar

  • El segundo plano se elige al arrancar: usa docker compose up -d.
  • Las rutas relativas se resuelven desde compose.yaml. Revisa la ubicación o usa rutas absolutas.
  • network_mode: bridge conserva la red predeterminada de docker run. Retíralo para que Compose cree su red de proyecto.
Validar en tu equipodocker compose config

Sin registro ni ejecución de comandos. La entrada se procesa en tu navegador.

Guardar el despliegue, no solo el comando

Un comando largo puede funcionar hoy y resultar difícil de reconstruir dentro de un mes. Al pasarlo a compose.yaml, los puertos, la imagen y las variables quedan en campos separados. Así es más sencillo revisar cambios, compartir la configuración o preparar el traslado a otro servidor.

La conversión genera un servicio por comando. No inspecciona contenedores en ejecución ni deduce dependencias entre aplicaciones. Tampoco altera el servidor: el archivo es un punto de partida para comprobar y ejecutar después.

Cómo obtener el archivo Compose

Pega una orden que empiece por docker run o docker container run. Mantén las comillas de los valores con espacios y las barras inversas de continuación. Puedes elegir otro nombre de servicio sin modificar el container_name indicado mediante --name.

Lee las notas y guarda el YAML junto a los archivos que referencia. Comprueba las rutas y ejecuta docker compose config. Para mantener el servicio en segundo plano, usa después docker compose up -d. Las tareas de una sola ejecución con --rm requieren otro modo de arranque.

Ejemplo: Nginx con puerto publicado

Este comando expone el puerto 80 del contenedor a través del 8080 del servidor. La política unless-stopped se conserva; -d se decide al ejecutar Compose y no se convierte en un campo del servicio.

docker run -d --name web -p 8080:80 \
  --restart unless-stopped nginx:alpine
services:
  web:
    image: "nginx:alpine"
    container_name: "web"
    ports:
      - "8080:80"
    restart: "unless-stopped"
    network_mode: "bridge"

Reutilizar los datos y la red correctos

Los volúmenes con nombre se declaran con su nombre exacto y external: true. Esto evita apuntar por accidente a un volumen nuevo con el prefijo del proyecto. Deben existir previamente; para una instalación nueva puedes crearlos antes o retirar esa marca externa. La conversión no copia datos.

Las rutas relativas parten del directorio del archivo Compose. Las redes personalizadas también se consideran externas. Si no hay opción de red, se conserva network_mode: bridge. Elimina ese campo si quieres que Compose cree su propia red de proyecto y resuelva los nombres de los servicios.

Qué preparar antes de pegar la orden

Se admite sintaxis de shell POSIX con comillas, escapes y continuación de líneas. No se admiten PowerShell, CMD, tuberías, varios comandos ni opciones globales de Docker. Sustituye variables y expresiones como $(pwd) por valores concretos. Un dólar literal debe ir protegido y se conserva como $$ en Compose.

--env-file se genera con format: raw y necesita Docker Compose 2.30.0 o posterior. No se lee el contenido de archivos, se comprueban imágenes ni se detectan puertos ocupados. Validar el YAML no garantiza que la aplicación vaya a arrancar.

Equivalencias entre opciones Docker y campos Compose

Opción DockerCampo ComposeResultado
IMAGEimageImagen y etiqueta originales
--namecontainer_nameNombre explícito del contenedor
-p, --publishportsAsignación entre puertos del host y del contenedor
-e, --envenvironmentValores omitidos resueltos en el entorno de ejecución
-v, --volume / --mountvolumesDirectorios montados y volúmenes con nombre o anónimos
--networknetworks / network_modeNombre de red o modo de red
--restartrestartPolítica de reinicio
IMAGE [COMMAND] [ARG…]commandArgumentos conservados como lista

Dudas al pasar a Compose

¿Por qué no aparece version?

El archivo sigue la Compose Specification y empieza con services. No añade el antiguo campo version. Valídalo con el comando actual docker compose.

¿Cómo se convierte --rm?

Para una tarea puntual usa docker compose run --rm --service-ports SERVICE y sustituye SERVICE por su nombre. --service-ports aplica las asignaciones de puertos del archivo.

¿Se ignoran las opciones no admitidas?

No. Opciones como --gpus, --link o ciertos montajes avanzados detienen la conversión y requieren configuración manual. No se exporta un resultado que las omita.

¿Puedo unir varios comandos?

Conviértelos por separado y combina las definiciones de servicios. Revisa los volúmenes compartidos, las redes y las dependencias antes de arrancar el conjunto.

¿Se envían las contraseñas a un servidor?

La entrada se convierte en el navegador y no se sube al servidor. Los valores introducidos sí quedan en el archivo generado: revísalo antes de publicarlo en un repositorio.

¿Sustituye al contenedor que ya está funcionando?

La conversión no ejecuta ninguna operación de Docker. Al arrancar con Compose tendrás que resolver los conflictos de nombre o de puertos con los contenedores existentes.

Documentación oficial de Docker: docker run · Compose · $$