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ónDescripción
-d, --detachEjecuta en segundo plano. Sin esta opción, los registros aparecen en primer plano; pulsa Ctrl+C para parar
--buildConstruye las imágenes antes de iniciar
--no-buildNo construye; falla si falta una imagen
--pull always|missing|neverSi se descargan las imágenes antes de iniciar
--waitEspera a que todos los servicios estén en marcha (y healthy si tienen comprobación de estado) antes de volver; implica -d
--wait-timeout SEGUNDOSTiempo máximo de espera con --wait
--force-recreateRecrea los contenedores aunque su configuración no haya cambiado
--no-recreateNo recrea los contenedores que ya existen
--no-depsNo inicia los servicios de depends_on
--scale SERVICIO=NÚMEROInicia varias réplicas
--remove-orphansElimina los contenedores de servicios que ya no están en compose.yaml
-V, --renew-anon-volumesCrea de nuevo los volúmenes anónimos en vez de reutilizar los de los contenedores antiguos
--abort-on-container-exitDetiene todos los contenedores cuando se detiene cualquiera de ellos (no se puede usar con -d)
--exit-code-from SERVICIOUsa el código de salida de ese servicio como código de salida del comando; implica la opción anterior
-t, --timeout SEGUNDOSSegundos de espera al detener los contenedores
-w, --watchVigila los cambios en los archivos y sincroniza o reconstruye (consulta Aplicaciones Node.js)
--no-startCrea sin iniciar
--quiet-pull / --quiet-buildOculta el progreso de la descarga o la compilación
--no-log-prefix, --timestamps, --no-colorFormato de los registros en primer plano
--dry-runMuestra 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 solo web, sin tocar su dependencia cache. Su configuración no cambió, así que la salida solo muestra Running.
  • --force-recreate web: recrea web aunque su configuración no haya cambiado (Started). Como no añadiste --no-deps, Compose también revisa cache, que está en depends_on (Running).
  • --wait cache: espera a que cache esté 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-exit detiene todo el comando up, y --exit-code-from hace que up devuelva el código de salida de worker. 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-2 y worker-3 que creó el --scale anterior 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