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ón | Descripción |
|---|---|
-a, --all | Lista todos los contenedores, incluidos los detenidos (por defecto solo los que están en marcha) |
-q, --quiet | Muestra solo los ID de los contenedores |
-f, --filter condición | Filtra los resultados; puedes usarla varias veces |
--format plantilla | Personaliza el formato de salida: table, json o una plantilla de Go |
-n, --last número | Muestra los n contenedores creados más recientemente (en cualquier estado) |
-l, --latest | Muestra el contenedor creado más recientemente |
-s, --size | Muestra el tamaño de los contenedores |
--no-trunc | No recorta la salida (muestra los ID y comandos completos) |
Condiciones habituales de --filter:
| Condición | Ejemplo |
|---|---|
status | status=running, status=exited, status=created |
name | name=web (coincidencia parcial) |
label | label=team=backend |
ancestor | ancestor=nginx:1.30-alpine (creados a partir de una imagen concreta) |
exited | exited=137 (filtra por código de salida) |
publish | publish=8080 (que usan un puerto concreto) |
network / volume | network=appnet, volume=pgdata |
health | health=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
SIZEes el tamaño de la capa de escritura del contenedor;virtualincluye la imagen. El contenedor de nginx escribió algunos archivos temporales al arrancar, por eso ocupa 86kB. -n 1muestra 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í usadocker container prune.
Capítulos relacionados
- Ciclo de vida de los contenedores
- docker inspect: ver información detallada de un contenedor
- Comandos de Docker Compose:
docker compose ps
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