Skip to main content

Як переглянути список запущених контейнерів? А всіх контейнерів?

Список container це перша команда, яку всі вчать, і та, що використовується найчастіше. Два флаги покривають майже все: -a для всіх станів, --filter і --format для решти.

Теорія

TL;DR

  • docker ps = тільки запущені container.
  • docker ps -a = кожен container, який знає daemon (running, paused, exited, dead, created).
  • docker ps -q = quiet mode, тільки container ID (по одному на рядок).
  • Комбінуй з --filter для запитів по статусу/імені/label/мережі/image.
  • --format для кастомних колонок або JSON-виходу. Заміняє grep/awk-пайплайни.
  • docker container ls це довга форма тієї ж команди.

Швидкий приклад

bash
# Дефолт: тільки запущені $ docker ps CONTAINER ID IMAGE COMMAND STATUS PORTS NAMES a3f9d2b8c1e4 nginx:1.27-alpine "/docker-entrypoint…" Up 5 minutes 0.0.0.0:8080->80/tcp web b7e1f4d6a2b8 postgres:16 "docker-entrypoint.s…" Up 5 minutes 5432/tcp db # Усі стани (running + exited + ...) $ docker ps -a CONTAINER ID IMAGE ... STATUS NAMES a3f9d2b8c1e4 nginx:1.27-alpine ... Up 5 minutes web b7e1f4d6a2b8 postgres:16 ... Up 5 minutes db c2d8e3f5a1b7 alpine ... Exited (0) 2 hours ago one-off-test # Тільки ID (зручно для пайпів) $ docker ps -aq a3f9d2b8c1e4 b7e1f4d6a2b8 c2d8e3f5a1b7

Корисні комбінації флагів

bash
# Фільтр за станом docker ps --filter status=running # дефолт docker ps --filter status=exited # тільки зупинені docker ps --filter status=paused # Фільтр за іменем (substring match) docker ps --filter name=web # Фільтр за image docker ps --filter ancestor=nginx:1.27-alpine # Фільтр за label docker ps --filter label=env=prod # Комбінувати фільтри (AND) docker ps -a --filter status=exited --filter name=test # Останні N створених docker ps -an 5 # Тільки найостанніший docker ps -al

--format для кастомного виходу

bash
# Колонки через таб $ docker ps --format 'table {{.Names}}\t{{.Status}}\t{{.Ports}}' NAMES STATUS PORTS web Up 5 minutes 0.0.0.0:8080->80/tcp db Up 5 minutes 5432/tcp # Кожен container як один JSON-рядок (ідеально для jq) $ docker ps --format json | jq '.Names' "web" "db" # Тільки імена, по одному на рядок $ docker ps --format '{{.Names}}' web db

Format-рядки дозволяють пропустити awk-танець.

Типові помилки

Дивуватися, чому container зник

bash
$ docker ps # порожньо (або без твого container) $ docker ps -a # ось він, у Exited

Крашнутий або завершений container не у дефолтному виводі ps. Завжди перевіряй -a, коли container зник.

Брати grep, коли є --filter

bash
# НЕПРАВИЛЬНО: крихко, ламається на substring overlap $ docker ps | grep myapp # ПРАВИЛЬНО: структурний фільтр $ docker ps --filter name=myapp

Filter точний у тому, що матчить; grep ні.

Забути -q при пайпі для видалення

bash
# НЕПРАВИЛЬНО: передає увесь table з заголовком "CONTAINER ID" $ docker rm $(docker ps -a) Error response from daemon: No such container: CONTAINER # ПРАВИЛЬНО: -q дає лише ID $ docker rm $(docker ps -aq)

Канонічний one-liner «знести всі container» це docker rm -f $(docker ps -aq).

Реальне застосування

  • docker ps -a після CI-білду — знайти exit code build-container з його поля Status.
  • docker ps --filter name= у shell-скриптах — перевірити, чи сервіс запущений, перед якоюсь дією.
  • docker ps --format json | jq у моніторингу — годувати структуровані дані у health-дашборди.
  • docker ps -aq | xargs docker rm -f у cleanup-хуках — стирати все між тестовими прогонами.

Питання для поглиблення

Q: Яка різниця між docker ps і docker container ls?


A: Та сама команда. docker ps це legacy коротка форма, docker container ls сучасна довга. Ідентична поведінка і флаги. Більшість людей все ще набирають ps.

Q: Як побачити використання ресурсів (CPU, пам'ять) на container?


A: docker stats (live) або docker stats --no-stream (snapshot). Інша команда, ніж ps; ps показує список, stats міряє.

Q: Чи можу я бачити container з конкретного Docker Compose проекту?


A: Так: docker ps --filter label=com.docker.compose.project=<project-name>. Або з директорії проекту docker compose ps.

Q: Чому мій вивід docker ps обрізається?


A: Довгі команди і імена image обрізаються за замовчуванням. Використовуй --no-trunc для повних рядків, або --format для друку лише потрібних колонок.

Q: (Senior) Як написати one-liner, щоб видалити всі container старші за день?


A:

bash
docker ps -a --filter status=exited \ --format '{{.ID}} {{.CreatedAt}}' \ | awk -v d="$(date -d 'yesterday' --iso-8601=seconds)" '$2 < d {print $1}' \ | xargs -r docker rm

Або простіше: docker container prune --filter 'until=24h' робить те саме без ручної date-математики.

Приклади

Знайти і tail логи найновішого container

bash
$ docker logs $(docker ps -alq) # -a (всі стани) -l (останній) -q (тільки ID) → один container ID # Тоді docker logs друкує його вивід.

Швидкий спосіб побачити, що нещодавно завершений container сказав перед смертю.

Cleanup всіх зупинених container старше за годину

bash
$ docker container prune --filter 'until=1h' -f Deleted Containers: c2d8e3f5a1b7... b9a4f1e2d8c3... Total reclaimed space: 12.4MB

Вбудований prune економить ручний filter+xargs пайплайн для типового кейсу.

Перевірити, чи сервіс up, перед продовженням

bash
# У shell-скрипті if docker ps --filter name=db --filter status=running -q | grep -q .; then echo "DB is up" else echo "DB not running" exit 1 fi

Корисно у deploy-скриптах і CI-перевірках. -q плюс grep -q . повертає true лише якщо хоч один container матчить.

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.

Коментарі

Ще немає коментарів