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:alpineservices:
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 Docker | Campo Compose | Resultado |
|---|---|---|
IMAGE | image | Imagen y etiqueta originales |
--name | container_name | Nombre explícito del contenedor |
-p, --publish | ports | Asignación entre puertos del host y del contenedor |
-e, --env | environment | Valores omitidos resueltos en el entorno de ejecución |
-v, --volume / --mount | volumes | Directorios montados y volúmenes con nombre o anónimos |
--network | networks / network_mode | Nombre de red o modo de red |
--restart | restart | Política de reinicio |
IMAGE [COMMAND] [ARG…] | command | Argumentos 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 · $$
