Быстрый старт: как найти контейнер за 30 секунд
CLI Marathon позволяет получить список контейнеров одной командой. Для поиска конкретного приложения используйте фильтр по имени:
marathon list containers --filter name=myapp
Флаг --filter принимает пару ключ-значение. В примере выше CLI отбирает все контейнеры, в имени которых встречается строка myapp. Вывод по умолчанию табличный: ID контейнера, имя, статус, образ и время создания.
Это базовая операция. Когда в кластере сотни контейнеров, одного фильтра по имени недостаточно. Дальше разберем точные фильтры по статусу, меткам и ID, а также управление выводом.
Если поиск не возвращает результатов, проверьте права доступа и версию CLI. Типовые причины сбоев и способы их устранения описаны в статье «Поиск контейнеров в Marathon не работает: причины и решения».
Архитектура хранилища ядер и место CLI Marathon
Хранилище ядер Marathon - это централизованный реестр метаданных всех контейнеров кластера. Каждый запущенный, остановленный или завершившийся с ошибкой контейнер оставляет запись: ID, имя, статус, метки, переменные окружения, потребление ресурсов и временные метки.
CLI Marathon - основной инструмент для запросов к этому реестру. В отличие от веб-интерфейса Marathon UI, командная строка дает три преимущества:
- Скорость. Нет задержек рендеринга страницы, результат выводится в stdout.
- Автоматизация. Вывод можно передать в скрипт через пайп или сохранить в файл.
- Массовые операции. Фильтрация сотен контейнеров по сложным условиям выполняется одной командой.
CLI обращается к REST API Marathon напрямую. Каждая команда marathon list containers транслируется в HTTP-запрос к эндпоинту /v2/apps или /v2/tasks. Понимание этой механики помогает отлаживать запросы: если CLI возвращает ошибку, проверьте доступность API через curl.
Для комплексной работы с хранилищем контейнеров, включая инвентаризацию образов и массовое обновление, используйте приемы из руководства «Магазин контейнеров Marathon: полное руководство».
Основные команды для поиска контейнеров
Центральная команда - marathon list containers. Она принимает три ключевых флага:
| Флаг | Назначение | Пример |
|---|---|---|
--filter | Отбор контейнеров по критерию | --filter status=running |
--limit | Ограничение количества строк вывода | --limit 50 |
--output | Формат вывода: table, json или csv | --output json |
Фильтры можно комбинировать через запятую. CLI применяет логическое И: контейнер должен удовлетворять всем условиям одновременно.
Фильтрация по имени и ID
Фильтр name ищет подстроку в имени приложения. Регистр учитывается. Примеры:
# Точное совпадение (если имя уникально)
marathon list containers --filter name=nginx-prod
# Частичное совпадение - найдет nginx-prod, nginx-staging, nginx-test
marathon list containers --filter name=nginx
Фильтр id работает аналогично, но ищет по идентификатору задачи Marathon. ID имеет формат app-name.instance-uuid:
marathon list containers --filter id=nginx-prod.a1b2c3
Wildcard-символы (*, ?) CLI Marathon не поддерживает. Для сложного поиска по шаблону используйте пайп в grep:
marathon list containers --output json | jq '.[] | select(.name | test("nginx-.*"))'
Фильтрация по статусу контейнера
Фильтр status отбирает контейнеры по текущему состоянию. Доступны четыре значения:
running- контейнер работает.stopped- остановлен вручную или по расписанию.failed- завершился с ненулевым кодом возврата.deploying- находится в процессе развертывания.
Команда для поиска проблемных контейнеров:
marathon list containers --filter status=failed
Вывод покажет ID, имя, статус и временную метку последнего изменения. Для анализа причин падения запросите детальную информацию:
marathon inspect container nginx-prod.a1b2c3
Записи остановленных контейнеров не удаляются автоматически. Они хранятся в реестре и доступны для аудита. Подробный разбор работы с завершенными задачами - в статье «Поиск и анализ остановленных контейнеров в Marathon».
Продвинутые фильтры: метки, окружение и ресурсы
Метки (labels) - основной механизм организации контейнеров в Marathon. В отличие от имени, метки не привязаны к логике приложения и задаются произвольно при запуске.
Поиск по меткам (labels)
Синтаксис фильтрации по меткам: --filter labels.<key>=<value>. Ключ и значение чувствительны к регистру.
# Все контейнеры с меткой tier=frontend
marathon list containers --filter labels.tier=frontend
# Все контейнеры окружения production
marathon list containers --filter labels.env=production
Назначение меток при запуске через Marathon UI: вкладка «Labels» в форме создания приложения. Через CLI:
marathon deploy app.json --labels tier=frontend,env=production,team=core
Рекомендуется стандартизировать набор меток в рамках проекта. Минимальный набор: env (окружение), team (команда-владелец), tier (уровень: frontend, backend, data).
Фильтрация по окружению (environment)
Прямого фильтра --filter env=production в CLI Marathon нет. Окружение определяется через метки или переменные среды. Практический подход - использовать метку env:
# Все контейнеры staging-окружения
marathon list containers --filter labels.env=staging
Если окружение зашито в имя приложения (например, myapp-prod), работает фильтр по имени:
marathon list containers --filter name=-prod
Комбинирование фильтров сужает выборку. Следующая команда найдет все контейнеры фронтенда в production, которые сейчас работают:
marathon list containers --filter labels.tier=frontend,labels.env=production,status=running
Для поиска по потреблению ресурсов (CPU, память) CLI Marathon не предоставляет встроенных фильтров. Используйте вывод в JSON и обработку через jq:
marathon list containers --output json | jq '.[] | select(.mem > 2048)'
Управление выводом: форматирование и ограничение результатов
В больших кластерах вывод сотен строк нечитаем. CLI Marathon дает два инструмента контроля: лимит строк и формат вывода.
Ограничение количества результатов
Флаг --limit обрезает вывод до указанного числа строк. CLI возвращает первые N контейнеров, удовлетворяющих фильтру:
# Только 10 последних контейнеров
marathon list containers --limit 10
Пагинация (постраничный вывод) в CLI Marathon не реализована. Для последовательного обхода большого списка комбинируйте --limit с сортировкой через jq:
marathon list containers --output json | jq 'sort_by(.created) | .[-50:]'
Эта команда выведет 50 самых новых контейнеров.
Экспорт в JSON и CSV для автоматизации
Флаг --output принимает три значения:
table- таблица с колонками (по умолчанию).json- массив объектов, готовый для машинной обработки.csv- строки с разделителем-запятой, открываются в Excel.
Экспорт всех контейнеров production в JSON для аудита:
marathon list containers --filter labels.env=production --output json > audit_prod.json
Обработка в jq для подсчета контейнеров по статусам:
cat audit_prod.json | jq 'group_by(.status) | map({status: .[0].status, count: length})'
Вывод в CSV для отчета:
marathon list containers --filter labels.env=production --output csv > report.csv
Для оперативного мониторинга контейнеров Docker в production-окружении используйте приемы из «Шпаргалка команд Docker 2026: отладка и мониторинг».
Типовые сценарии: от диагностики до аудита
Сценарий 1: Быстрый поиск проблемных контейнеров
Задача: найти все контейнеры в статусе failed и получить логи для анализа.
# Шаг 1: список упавших контейнеров
marathon list containers --filter status=failed
# Шаг 2: детальная информация по конкретному контейнеру
marathon inspect container myapp.a1b2c3
# Шаг 3: логи контейнера (если настроен драйвер логирования)
marathon logs container myapp.a1b2c3 --tail 100
Если проблема массовая, экспортируйте весь список в JSON и передайте в систему мониторинга.
Сценарий 2: Аудит окружения
Задача: получить полную выгрузку всех контейнеров staging для ревизии.
# Полный экспорт
marathon list containers --filter labels.env=staging --output json > staging_audit.json
# Сводка по статусам
cat staging_audit.json | jq 'group_by(.status) | map({status: .[0].status, count: length})'
# Сводка по командам-владельцам
cat staging_audit.json | jq 'group_by(.labels.team) | map({team: .[0].labels.team, count: length})'
Сценарий 3: Поиск контейнеров с высоким потреблением памяти
Задача: выявить контейнеры, потребляющие больше 2 ГБ RAM.
marathon list containers --output json | jq '.[] | select(.mem > 2048) | {name, mem, status}'
Результат покажет имена, потребление памяти в мегабайтах и статус. Для контейнеров в статусе running рассмотрите вертикальное масштабирование или оптимизацию приложения.
Частые ошибки и их решение
Ошибка: неверный синтаксис фильтра. Симптом: CLI возвращает пустой результат или ошибку парсинга. Решение: проверьте, что фильтр задан как key=value без пробелов вокруг знака равенства. Неправильно: --filter name = myapp. Правильно: --filter name=myapp.
Ошибка: недостаточно прав. Симптом: 403 Forbidden при запросе. Решение: CLI Marathon использует токен аутентификации из переменной окружения MARATHON_AUTH_TOKEN или конфигурационного файла ~/.marathon/config. Проверьте наличие токена и его срок действия.
Ошибка: устаревшая версия CLI. Симптом: флаг --filter не распознается, вывод отличается от документации. Решение: обновите CLI до актуальной версии командой marathon version для проверки текущей и marathon update-cli для обновления. Версия должна соответствовать версии Marathon API в кластере.
Ошибка: фильтр по меткам не находит контейнеры. Симптом: команда с --filter labels.env=production возвращает пустой список, хотя контейнеры есть. Решение: метки чувствительны к регистру. Проверьте точное написание ключа и значения через marathon inspect container <id>. Частая причина - Production вместо production.
Для углубленного изучения фильтрации по меткам, состояниям и ресурсам используйте «Поиск и фильтрация контейнеров в Marathon: полное руководство».
Если вы разворачиваете кластер для тестирования описанных команд, обратите внимание на облачную инфраструктуру Timeweb Cloud - она предоставляет готовые Kubernetes-кластеры и VDS для Marathon за минуты.