Contenido

Tutorial de docker ps: lista contenedores con filtros y formato personalizado

docker ps lista los contenedores. Para el flujo completo de trabajo con contenedores, consulta Ciclo de vida de los contenedores.

Sintaxis

docker ps [opciones]

docker ps y docker container ls son el mismo comando.

Opciones

OpciónDescripción
-a, --allLista todos los contenedores, incluidos los detenidos (por defecto solo los que están en marcha)
-q, --quietMuestra solo los ID de los contenedores
-f, --filter condiciónFiltra los resultados; puedes usarla varias veces
--format plantillaPersonaliza el formato de salida: table, json o una plantilla de Go
-n, --last númeroMuestra los n contenedores creados más recientemente (en cualquier estado)
-l, --latestMuestra el contenedor creado más recientemente
-s, --sizeMuestra el tamaño de los contenedores
--no-truncNo recorta la salida (muestra los ID y comandos completos)

Condiciones habituales de --filter:

CondiciónEjemplo
statusstatus=running, status=exited, status=created
namename=web (coincidencia parcial)
labellabel=team=backend
ancestorancestor=nginx:1.30-alpine (creados a partir de una imagen concreta)
exitedexited=137 (filtra por código de salida)
publishpublish=8080 (que usan un puerto concreto)
network / volumenetwork=appnet, volume=pgdata
healthhealth=unhealthy

Ejemplos

El entorno tiene tres contenedores: web (nginx) y worker1 (con la etiqueta team=backend) en marcha, y stopped1 detenido.

Contenedores en marcha y todos los contenedores

$ docker ps
CONTAINER ID   IMAGE               COMMAND                  CREATED         STATUS         PORTS     NAMES
c260b28b0630   alpine:3.23         "sleep 600"              2 seconds ago   Up 2 seconds             worker1
1ec4fdc5c592   nginx:1.30-alpine   "/docker-entrypoint.…"   8 seconds ago   Up 2 seconds   80/tcp    web

$ docker ps -a
CONTAINER ID   IMAGE               COMMAND                  CREATED         STATUS                     PORTS     NAMES
c260b28b0630   alpine:3.23         "sleep 600"              2 seconds ago   Up 2 seconds                         worker1
17b5b9a8c9ce   alpine:3.23         "true"                   3 seconds ago   Exited (0) 2 seconds ago             stopped1
1ec4fdc5c592   nginx:1.30-alpine   "/docker-entrypoint.…"   8 seconds ago   Up 2 seconds               80/tcp    web

$ docker ps -q
c260b28b0630
1ec4fdc5c592

docker ps no muestra stopped1; solo aparece con docker ps -a, con el estado Exited (0). -q muestra solo los ID, para pasarlos fácilmente a otros comandos.

Filtrar

$ docker ps -a --filter status=exited
CONTAINER ID   IMAGE         COMMAND   CREATED         STATUS                     PORTS     NAMES
17b5b9a8c9ce   alpine:3.23   "true"    3 seconds ago   Exited (0) 2 seconds ago             stopped1

$ docker ps --filter name=work
CONTAINER ID   IMAGE         COMMAND       CREATED         STATUS         PORTS     NAMES
c260b28b0630   alpine:3.23   "sleep 600"   2 seconds ago   Up 2 seconds             worker1

$ docker ps --filter label=team=backend
CONTAINER ID   IMAGE         COMMAND       CREATED         STATUS         PORTS     NAMES
c260b28b0630   alpine:3.23   "sleep 600"   2 seconds ago   Up 2 seconds             worker1

Personalizar los campos

$ docker ps --format "table {{.Names}}\t{{.Image}}\t{{.Status}}"
NAMES     IMAGE               STATUS
worker1   alpine:3.23         Up 2 seconds
web       nginx:1.30-alpine   Up 3 seconds

table añade una fila de encabezado y \t (tabulador) separa los campos. Campos habituales: .ID, .Names, .Image, .Status, .Ports, .CreatedAt, .Labels y .Size. Usa --format json para obtener JSON.

Tamaño de los contenedores y el contenedor más reciente

$ docker ps -s
CONTAINER ID   IMAGE               COMMAND                  CREATED         STATUS         PORTS     NAMES     SIZE
c260b28b0630   alpine:3.23         "sleep 600"              3 seconds ago   Up 2 seconds             worker1   4.1kB (virtual 9.1MB)
1ec4fdc5c592   nginx:1.30-alpine   "/docker-entrypoint.…"   9 seconds ago   Up 3 seconds   80/tcp    web       86kB (virtual 66.8MB)

$ docker ps -n 1
CONTAINER ID   IMAGE         COMMAND       CREATED         STATUS         PORTS     NAMES
c260b28b0630   alpine:3.23   "sleep 600"   3 seconds ago   Up 2 seconds             worker1
  • El primer número de SIZE es el tamaño de la capa de escritura del contenedor; virtual incluye la imagen. El contenedor de nginx escribió algunos archivos temporales al arrancar, por eso ocupa 86kB.
  • -n 1 muestra solo el contenedor creado más recientemente.

Procesamiento en lote: eliminar todos los contenedores detenidos

$ docker rm $(docker ps -aq --filter status=exited)
17b5b9a8c9ce

$(...) ejecuta primero el comando interior y pasa su resultado (los ID de todos los contenedores detenidos) como argumentos a docker rm. Obtienes el mismo resultado con docker container prune (consulta Limpiar espacio en disco).

PowerShell también admite la sintaxis $(...); Windows CMD no, así que allí usa docker container prune.

Capítulos relacionados

Ejercicios

Ejercicio: lista todos los contenedores creados a partir de nginx:1.30-alpine, incluidos los detenidos, y muestra solo su nombre y estado.

Respuesta
docker ps -a --filter ancestor=nginx:1.30-alpine --format "table {{.Names}}\t{{.Status}}"

Preguntas frecuentes

¿Por qué no veo en docker ps el contenedor que acabo de ejecutar?

docker ps solo lista los contenedores **en marcha**. Si el contenedor ya terminó (por ejemplo, un comando puntual o un arranque fallido), usa docker ps -a.

¿docker ps y docker container ls son lo mismo?

Sí. docker ps, docker container ls, docker container list y docker container ps son el mismo comando.

¿Qué diferencia hay entre Exited (0) y Exited (1) en STATUS?

El número entre paréntesis es el código de salida. 0 significa que el programa terminó correctamente; cualquier otro valor indica un error, y 137 significa que se terminó a la fuerza (por ejemplo, por falta de memoria). Usa docker logs para averiguar la causa.

Actualizado 14 de octubre de 2026