Comando docker compose down

 Docker 命令大全Referencia completa de comandos Docker


docker compose downSe utiliza para detener y eliminar losdocker compose upcontenedores, redes y recursos relacionados que se hayan iniciado.

Cuando se ejecutadocker compose uppara iniciar un conjunto de servicios, Docker crea automáticamente contenedores, redes e incluso volúmenes de datos anónimos.

Si solo se utilizadocker compose stop, los contenedores solo se detienen temporalmente, pero siguen ocupando espacio en disco y conservando la configuración de red; en el próximo inicio, el estado anterior puede provocar conflictos.

docker compose downes una limpieza completa con un solo comando: detiene los contenedores, los elimina y retira las redes, dejando el entorno en un estado limpio.

El siguiente diagrama de flujo muestra la cadena de ejecución completa del comando down:

Nodo inicial docker compose down Paso 1: SIGTERM ① Enviar señal SIGTERM Envía una señal de detención a cada contenedor y espera una salida ordenada. Paso 2: Comprobación de tiempo de espera ¿Tiempo de espera agotado? Por defecto 10s Rama: tiempo de espera agotado Sí Terminación forzosa con SIGKILL Rama: salida normal No (salida normal) Paso 3: Eliminar contenedores ② Eliminar todos los contenedores Elimina todas las instancias de contenedores definidas en el proyecto Compose. Paso 4: Eliminar redes ③ Eliminar las redes del proyecto Elimina las redes definidas en docker-compose.yml (red por defecto + redes personalizadas). Paso 5: Operaciones opcionales ④ Opcional: eliminar volúmenes de datos (-v) / eliminar imágenes (--rmi) Solo se ejecuta cuando se especifican las opciones correspondientes; por defecto se conservan. Fin Entorno del proyecto limpiado ✓

Si no estás seguro de que el entorno actual esté limpio, primero usadocker compose pspara ver los contenedores en ejecución y luego decide si ejecutar down.


Inicio rápido

El uso más sencillo: en el directorio que contienedocker-compose.ymlel archivo, ejecuta:

# 进入 Compose 项目目录
cd ~/myproject

# 一键停止并清理所有资源
docker compose down

Después de la ejecución, la terminal suele mostrar un resultado similar al siguiente:

[+] Running 3/3
 Container myproject-web-1     Removed    1.2s
 Container myproject-db-1      Removed    0.8s
 Network myproject_default     Removed    0.3s

En este momento:

  • Todos los contenedores iniciados por Compose han sido detenidos y eliminados.
  • La red exclusiva del proyecto ha sido eliminada.
  • Los volúmenes de datosse conservan por defecto(para evitar la eliminación accidental de datos).

Consulta rápida de opciones del comando

A continuación se muestradocker compose downla lista completa de opciones compatibles:

OpciónAbreviaturaDescripciónValor por defecto
--volumes-vElimina los volúmenes de datos con nombre definidos en el archivo Compose y los volúmenes de datos anónimos montados por los contenedores.No eliminar
--remove-orphansNingunoElimina los contenedores huérfanos correspondientes a servicios que ya no existen en el archivo Compose.No eliminar
--rmi <type>NingunoElimina las imágenes utilizadas por los servicios; type puede serall(todas) olocal(solo las construidas localmente).No eliminar
--timeout-tTiempo de espera (en segundos) para detener los contenedores; si se agota, se fuerzan con SIGKILL.10
--dry-runNingunoSolo muestra las operaciones que se ejecutarán, sin ejecutarlas realmente (v2.21+).No activado

El comportamiento predeterminado más importante a tener en cuenta:Los volúmenes de datos no se eliminan por defecto. Esto significa que, incluso si ejecutas down, los datos de la base de datos permanecen en los volúmenes de datos y se restaurarán en el próximo up. Es un mecanismo de protección, pero si realmente deseas una limpieza completa, recuerda añadir-v。


Uso detallado

Uso básico: detener y limpiar

Ejecuta directamente en el directorio del proyecto, sin ninguna opción:

# 停止并删除容器和网络,保留数据卷
docker compose down

Esto equivale a ejecutar sucesivamente:

docker compose stop       # 停止所有容器
docker compose rm -f      # 强制删除所有容器
docker network rm &lt;网络名&gt;  # 删除项目网络

Eliminar también los volúmenes de datos: -v / --volumes

Cuando necesites vaciar por completo el entorno, incluidos datos de bases de datos, cachés y otros contenidos persistentes, añade-v:

# 删除容器、网络以及 Compose 文件中定义的所有具名数据卷
docker compose down -v

El siguiente es un ejemplo comparativo completo para ayudar a comprender-vel impacto de:

Ejemplo

# Contenido del archivo docker-compose.yml
services
:
  web
:
    image
: nginx
    ports
:
     - "8080:80"
  db
:
    image
: mysql:8.0
    environment
:
      MYSQL_ROOT_PASSWORD
: ejemplo123
    volumes
:
     - db_data:/var/lib/mysql    # Volumen de datos con nombre

volumes
:
  db_data
:                        # Define un volumen de datos con nombre
# 不带 -v:db_data 数据卷保留,数据库中的数据不丢失
$ docker compose down
[+] Running 3/3
 Container test-web-1  Removed
 Container test-db-1   Removed
 Network test_default   Removed

# 带 -v:db_data 数据卷被删除,数据库数据永久丢失
$ docker compose down -v
[+] Running 4/4
 Container test-web-1   Removed
 Container test-db-1    Removed
 Volume test_db_data    Removed
 Network test_default   Removed

Al ejecutar en un entorno de producción,down -vantes piénsalo dos veces: una vez eliminados los volúmenes de datos, los datos serán irrecuperables. Se recomienda hacer una copia de seguridad primero, o usar esta opción solo en entornos que no sean de producción.-v。

Limpiar contenedores huérfanos: --remove-orphans

Cuando eliminas la definición de un servicio en tu archivo docker-compose.yml, pero el contenedor de ese servicio aún permanece, estos contenedores se denominan "contenedores huérfanos".

Ejemplo

# docker-compose.yml
services:
  app:
    image: nginx
    networks:
- shared_network # Referencia a una red externa

networks:
  shared_network:
external: true # Red externa; down no la eliminará

volumes:
  shared_data:
external: true # Volumen de datos externo; down -v tampoco lo eliminará

Esto es razonable: los recursos externos pueden ser compartidos por múltiples proyectos Compose y no deberían ser limpiados por un solo proyecto.

Orden de inicio de las dependencias de contenedores

down detiene los contenedores en orden inverso, es decir, primero detiene a los dependientes y luego a los que son dependencia, al contrario que el orden de inicio de up, asegurando que las dependencias se liberen correctamente.

Compatibilidad con docker-compose (versión antigua)

Si estás utilizando la versión antiguadocker-compose(con guion), el formato del comando es:

$ docker-compose down -v

La nueva versión de Docker Compose v2 integra las funciones de Compose en la CLI de Docker; el comando pasa a serdocker compose(separado por espacios). Los parámetros de ambos son exactamente los mismos, pero se recomienda usar de manera uniforme el formato de la nueva versión.


Preguntas frecuentes

P: ¿Los contenedores siguen ejecutándose después de down?

Posible causa: estos contenedores no fueron creados por el archivo Compose actual, sino mediantedocker runu otros archivos Compose.

usardocker psRevisa los detalles del contenedor para confirmar si el prefijo del nombre del contenedor coincide con el nombre del proyecto Compose.

P: ¿El espacio en disco no se libera después de down -v?

Comprueba si hay imágenes sin usar que ocupen espacio:

$ docker image ls        # 查看镜像列表
$ docker image prune -a  # 清理未使用的镜像

Docker no limpia las imágenes automáticamente; debes ejecutar manualmentedocker image pruneo usardown --rmi allpara limpiarlas también.

P: ¿Cómo ejecutar down de forma segura en un script?

Ejemplo

#!/bin/bash
# Script de limpieza seguro: primero confirma que el proyecto esté en ejecución y luego ejecuta down

PROJECT_DIR="/opt/ejemplo-app"

if [ -f "$PROJECT_DIR/docker-compose.yml" ]; then
    cd "$PROJECT_DIR"
    # Primero usa ps para comprobar si hay servicios en ejecución
    if docker compose ps --status running | grep -q .; then
        echo "Deteniendo el proyecto EJEMPLO..."
        docker compose down --remove-orphans
        echo "Limpieza completada"
    else
        echo "El proyecto no está en ejecución; se omite la operación down"
    fi
else
    echo "Error: no se encuentra el archivo docker-compose.yml"
    exit 1
fi

Este script realiza una verificación básica de la ruta y una evaluación del estado antes de la limpieza, evitando operaciones accidentales.


 Docker 命令大全Referencia completa de comandos Docker

Otras extensiones