Contenido
Tutorial de docker compose up: opciones y ejemplos
docker compose up crea e inicia los servicios de compose.yaml. Para empezar, consulta Introducción a Docker Compose; para los demás comandos, Comandos de Docker Compose.
Sintaxis
docker compose up [OPCIONES] [SERVICIO...]
Si no indicas ningún servicio, se procesan todos. up sigue este orden: crea las redes, crea los volúmenes, descarga o construye las imágenes que hagan falta, crea los contenedores (recreando los que cambiaron de configuración) y los inicia.
Opciones
| Opción | Descripción |
|---|---|
-d, --detach | Ejecuta en segundo plano. Sin esta opción, los registros aparecen en primer plano; pulsa Ctrl+C para parar |
--build | Construye las imágenes antes de iniciar |
--no-build | No construye; falla si falta una imagen |
--pull always|missing|never | Si se descargan las imágenes antes de iniciar |
--wait | Espera a que todos los servicios estén en marcha (y healthy si tienen comprobación de estado) antes de volver; implica -d |
--wait-timeout SEGUNDOS | Tiempo máximo de espera con --wait |
--force-recreate | Recrea los contenedores aunque su configuración no haya cambiado |
--no-recreate | No recrea los contenedores que ya existen |
--no-deps | No inicia los servicios de depends_on |
--scale SERVICIO=NÚMERO | Inicia varias réplicas |
--remove-orphans | Elimina los contenedores de servicios que ya no están en compose.yaml |
-V, --renew-anon-volumes | Crea de nuevo los volúmenes anónimos en vez de reutilizar los de los contenedores antiguos |
--abort-on-container-exit | Detiene todos los contenedores cuando se detiene cualquiera de ellos (no se puede usar con -d) |
--exit-code-from SERVICIO | Usa el código de salida de ese servicio como código de salida del comando; implica la opción anterior |
-t, --timeout SEGUNDOS | Segundos de espera al detener los contenedores |
-w, --watch | Vigila los cambios en los archivos y sincroniza o reconstruye (consulta Aplicaciones Node.js) |
--no-start | Crea sin iniciar |
--quiet-pull / --quiet-build | Oculta el progreso de la descarga o la compilación |
--no-log-prefix, --timestamps, --no-color | Formato de los registros en primer plano |
--dry-run | Muestra lo que haría sin ejecutarlo |
Proyecto de ejemplo
services:
web:
image: nginx:1.30-alpine
ports:
- "8080:80"
depends_on:
- cache
cache:
image: redis:8-alpine
volumes:
- cache_data:/data
worker:
image: alpine:3.23
command: ["sh", "-c", "echo worker done"]
volumes:
cache_data:
Iniciar todos los servicios
$ docker compose up -d
[+] up 15/15
✔ Image redis:8-alpine Pulled 3.4s
✔ Network ref-compose_default Created 0.0s
✔ Volume ref-compose_cache_data Created 0.0s
✔ Container ref-compose-worker-1 Started 0.4s
✔ Container ref-compose-cache-1 Started 0.6s
✔ Container ref-compose-web-1 Started 0.8s
$ docker compose ps -a
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
ref-compose-cache-1 redis:8-alpine "docker-entrypoint.s…" cache 1 second ago Up Less than a second 6379/tcp
ref-compose-web-1 nginx:1.30-alpine "/docker-entrypoint.…" web 1 second ago Up Less than a second 0.0.0.0:8080->80/tcp, [::]:8080->80/tcp
ref-compose-worker-1 alpine:3.23 "sh -c 'echo worker …" worker 1 second ago Exited (0) Less than a second ago
worker termina después de ejecutar echo, así que su estado es Exited (0). Es lo normal en un servicio que se ejecuta una sola vez.
Procesar solo algunos servicios
$ docker compose up -d --no-deps web
[+] up 1/1
✔ Container ref-compose-web-1 Running 0.0s
$ docker compose up -d --force-recreate web
[+] up 2/2
✔ Container ref-compose-cache-1 Running 0.0s
✔ Container ref-compose-web-1 Started 0.4s
$ docker compose up -d --wait cache
[+] up 1/1
✔ Container ref-compose-cache-1 Healthy 0.5s
--no-deps web: procesa soloweb, sin tocar su dependenciacache. Su configuración no cambió, así que la salida solo muestraRunning.--force-recreate web: recreawebaunque su configuración no haya cambiado (Started). Como no añadiste--no-deps, Compose también revisacache, que está endepends_on(Running).--wait cache: espera a quecacheesté listo antes de volver. La imagen de Redis no define comprobación de estado, así que basta con que el contenedor esté en marcha.
--scale: varias réplicas
$ docker compose up -d --scale worker=3 worker
[+] up 3/3
✔ Container ref-compose-worker-3 Started 0.5s
✔ Container ref-compose-worker-2 Started 0.3s
✔ Container ref-compose-worker-1 Started 0.2s
$ docker compose ps -a worker
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
ref-compose-worker-1 alpine:3.23 "sh -c 'echo worker …" worker 4 seconds ago Exited (0) Less than a second ago
ref-compose-worker-2 alpine:3.23 "sh -c 'echo worker …" worker 1 second ago Exited (0) Less than a second ago
ref-compose-worker-3 alpine:3.23 "sh -c 'echo worker …" worker 1 second ago Exited (0) Less than a second ago
--scale worker=3 da a worker tres contenedores, numerados automáticamente -1, -2 y -3. Un servicio que publica un puerto del host (ports) no se puede escalar directamente, porque los puertos del host entrarían en conflicto.
--exit-code-from: ejecutar pruebas en CI
$ docker compose up --abort-on-container-exit --exit-code-from worker worker
[+] up 2/2
✔ Container ref-compose-worker-2 Removed 0.0s
✔ Container ref-compose-worker-3 Removed 0.0s
Attaching to worker-1
worker-1 | worker done
worker-1 exited with code 0
Aborting on container exit...
Container ref-compose-worker-1 Stopping
Container ref-compose-worker-1 Stopped
w Enable Watch d Detach
- Se ejecuta solo
worker. Cuando termina,--abort-on-container-exitdetiene todo el comandoup, y--exit-code-fromhace queupdevuelva el código de salida deworker. En CI se usa para ejecutar un servicio de pruebas: si la prueba falla, el comando falla y el CI también. - Los contenedores
worker-2yworker-3que creó el--scaleanterior se eliminan esta vez (Removed). Como no indicaste el número de réplicas, Compose vuelve al valor por defecto de una.
Capítulos relacionados
Ejercicios
Ejercicio: edita el compose.yaml del ejemplo, cambia el puerto de web a 8081:80, aplica el cambio con un solo comando y comprueba que solo se recrea web.
Respuesta
docker compose up -d
En la salida, web muestra Recreated/Started y cache muestra Running (sin cambios). En docker compose ps, el valor de PORTS de web pasa a ser 0.0.0.0:8081->80/tcp.
Preguntas frecuentes
¿Cómo aplico los cambios de compose.yaml?
Vuelve a ejecutar docker compose up -d. Compose compara la configuración y recrea solo los servicios que cambiaron. docker compose restart no aplica la configuración nueva. Consulta [Comandos de Docker Compose](/es/docker/compose-commands/).
¿Por qué up -d no reconstruye la imagen después de cambiar el Dockerfile?
Si la imagen ya existe, up no la reconstruye automáticamente. Añade --build: docker compose up -d --build.
¿Qué diferencia hay entre --wait y depends_on con service_healthy?
depends_on controla el orden de arranque entre servicios. --wait hace que el propio docker compose up espere hasta que todos los servicios estén en marcha (y healthy si tienen comprobación de estado) antes de terminar, algo útil cuando un script o un job de CI debe pasar al siguiente paso.
Actualizado 14 de octubre de 2026