Як переглянути список запущених контейнерів? А всіх контейнерів?
Список 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це довга форма тієї ж команди.
Швидкий приклад
# Дефолт: тільки запущені
$ 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Корисні комбінації флагів
# Фільтр за станом
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 для кастомного виходу
# Колонки через таб
$ 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
dbFormat-рядки дозволяють пропустити awk-танець.
Типові помилки
Дивуватися, чому container зник
$ docker ps # порожньо (або без твого container)
$ docker ps -a # ось він, у ExitedКрашнутий або завершений container не у дефолтному виводі ps. Завжди перевіряй -a, коли container зник.
Брати grep, коли є --filter
# НЕПРАВИЛЬНО: крихко, ламається на substring overlap
$ docker ps | grep myapp
# ПРАВИЛЬНО: структурний фільтр
$ docker ps --filter name=myappFilter точний у тому, що матчить; grep ні.
Забути -q при пайпі для видалення
# НЕПРАВИЛЬНО: передає увесь 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:
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
$ docker logs $(docker ps -alq)
# -a (всі стани) -l (останній) -q (тільки ID) → один container ID
# Тоді docker logs друкує його вивід.Швидкий спосіб побачити, що нещодавно завершений container сказав перед смертю.
Cleanup всіх зупинених container старше за годину
$ docker container prune --filter 'until=1h' -f
Deleted Containers:
c2d8e3f5a1b7...
b9a4f1e2d8c3...
Total reclaimed space: 12.4MBВбудований prune економить ручний filter+xargs пайплайн для типового кейсу.
Перевірити, чи сервіс up, перед продовженням
# У 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 матчить.
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.
Коментарі
Ще немає коментарів