Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Як переглянути список запущених контейнерів? А всіх контейнерів?». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)**`docker ps`** показує запущені container. **`docker ps -a`** показує усі, включно зі stopped/exited. **`docker ps -aq`** виводить лише ID (зручно для скриптів). ```bash docker ps # тільки running docker ps -a # всі стани docker ps -aq # всі ID, по одному на рядок docker ps --filter status=exited # тільки exited docker ps --format 'table {{.Names}}\t{{.Status}}' # кастомні колонки ``` **Головне:** `ps` за замовчуванням показує лише running. Додай `-a` для exited і dead. `--filter` для фільтрації по стану/імені/label, `--format` для скриптової відповіді.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)Зображення**Список 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 матчить.Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.