dtop: мониторинг Docker-контейнеров в терминале

Обзор

dtop предоставляет исчерпывающую сводку по всем Docker-контейнерам, запущенным в вашей системе, — прямо в терминале. Мгновенно получайте информацию о статусе контейнеров, потреблении ресурсов и ключевых метриках, не выходя из командной строки. Утилита поддерживает подключение по SSH, TCP и локальное соединение, а также интегрируется с Dozzle для просмотра логов контейнеров.

Возможности

  • 💻 Мониторинг в реальном времени — живые обновления статуса и метрик контейнеров

  • ⚡ Лёгкость — молниеносно быстрая и лёгкая утилита, написанная на Rust

  • 🌍 Поддержка нескольких хостов — мониторинг контейнеров на нескольких хостах одновременно

  • 🔍 Dozzle — открытие ссылок Dozzle с помощью горячих клавиш

  • 📝 Потоковые логи — просмотр логов контейнеров в реальном времени

Дорожная карта

  • ✓ Сортировка контейнеров по имени и статусу

  • ✓ Потоковый просмотр логов (базовый)

  • ✓ Поддержка прокрутки мышью

  • ✓ Поддержка TLS-сертификатов через DOCKER_CERT_PATH

  • ✓ Адаптивные столбцы для узкого экрана

  • ✓ Остановка, запуск и удаление контейнеров

  • ✓ Поддержка статуса health для контейнеров

  • ✓ Поиск и фильтрация контейнеров

  • ✓ Простой разбор и форматирование JSON

  • ✓ Настраиваемые столбцы с сохранением предпочтений

  • ✓ Поддержка дискового ввода-вывода (disk IO)

  • ❏ Поддержка кластеров Kubernetes

Установка

dtop можно установить через несколько пакетных менеджеров или загрузив бинарный файл напрямую.

Homebrew

Установка через Homebrew для macOS или Linux (рекомендуется):

brew install dtop
Примечание

Homebrew рекомендуется, поскольку dtop находится в активной разработке и часто обновляется. При использовании Homebrew обновления происходят автоматически.

Docker

dtop публикуется как Docker-образ. Его можно получить с GitHub.

docker run -v /var/run/docker.sock:/var/run/docker.sock -it ghcr.io/amir20/dtop

На данный момент образ доступен для архитектур amd64 и arm64.

Скрипт установки

Загружает последний релиз с GitHub.

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/amir20/dtop/releases/latest/download/dtop-installer.sh | sh

Nix

Запуск без установки:

nix run github:amir20/dtop

Или установка в профиль:

nix profile install github:amir20/dtop

Для NixOS или home-manager добавьте в конфигурацию:

# В inputs вашего flake
inputs.dtop.url = "github:amir20/dtop";

# Затем используйте
inputs.dtop.packages.${system}.default

Установка из исходников

dtop написан на Rust и устанавливается через Cargo.

cargo install dtop

Самообновление

dtop имеет встроенный механизм самообновления (self-update) для перехода на последнюю версию:

dtop update

Эта команда выполняет следующее:

  • Проверяет наличие новой версии в релизах GitHub

  • Загружает и устанавливает обновление, если доступна более новая версия

  • Автоматически заменяет текущий бинарный файл новым

Примечание

Самообновление доступно только для бинарных файлов, установленных через скрипт установки или загруженных из релизов GitHub. Docker-образы следует обновлять путём загрузки свежего образа, а установки через Cargo — командой cargo install dtop --force.

Параметры командной строки

По умолчанию dtop подключается к локальному демону Docker через /var/run/docker.sock. Также поддерживается переменная окружения DOCKER_HOST для подключения к удалённым хостам.

❯ dtop --help
A terminal-based Docker container monitoring tool with real-time CPU and memory metrics

Usage: dtop [OPTIONS] [COMMAND]

Commands:
  update  Update dtop to the latest version
  help    Print this message or the help of the given subcommand(s)

Options:
  -H, --host <HOST>
          Docker host(s) to connect to. Can be specified multiple times.

          Examples:
            --host local                    (Connect to local Docker daemon / active Docker context)
            --host unix:///path/docker.sock (Connect to a specific Unix socket)
            --host ssh://user@host          (Connect via SSH)
            --host ssh://user@host:2222     (Connect via SSH with custom port)
            --host tcp://host:2375          (Connect via TCP to remote Docker daemon)
            --host tls://host:2376          (Connect via TLS)
            --host local --host ssh://user@server1 --host tls://server2:2376  (Multiple hosts)

          For TLS connections, set DOCKER_CERT_PATH to a directory containing:
            key.pem, cert.pem, and ca.pem

          "local" follows the Docker CLI's endpoint resolution: it honors DOCKER_HOST,
          DOCKER_CONTEXT, and the active `docker context` from ~/.docker/config.json.

          If not specified, will use config file or default to "local"

  -i, --icons <ICONS>
          Icon style to use for the UI

          Options:
            unicode  - Standard Unicode icons (default, works everywhere)
            nerd     - Nerd Font icons (requires Nerd Font installed)

  -f, --filter <FILTER>
          Filter containers (can be specified multiple times)

          Examples:
            --filter status=running
            --filter name=nginx
            --filter label=com.example.version=1.0
            --filter ancestor=ubuntu:24.04

          Multiple filters of the same type use OR logic:
            --filter status=running --filter status=paused

          Different filter types use AND logic:
            --filter status=running --filter name=nginx

          Available filters:
            id, name, label, status, ancestor, before, since,
            volume, network, publish, expose, health, exited

          Note: Some filters only work with container listing, not events.
          Warnings will be shown if a filter is incompatible with events.

  -a, --all
          Show all containers (default shows only running containers)

          By default, dtop only shows running containers.
          Use this flag to show all containers including stopped, exited, and paused containers.

          Note: This flag can only enable showing all containers, not disable it.
          If your config file has 'all: true', you'll need to edit the config file
          or press 'a' in the UI to toggle back to showing only running containers.

          This is equivalent to pressing 'a' in the UI to toggle show all.

  -s, --sort <SORT>
          Default sort field for container list

          Options:
            uptime  - Sort by container uptime/creation time (default, newest first)
            name    - Sort by container name (alphabetically)
            cpu     - Sort by CPU usage (highest first)
            memory  - Sort by memory usage (highest first)

          You can also use short forms: u, n, c, m

          The sort direction can be toggled in the UI by pressing the same key again.

  -h, --help
          Print help (see a summary with '-h')

  -V, --version
          Print version

Файл конфигурации

dtop поддерживает как флаги командной строки, так и файл конфигурации. Файл конфигурации ищется в следующих местах (в порядке приоритета):

  1. ./config.yaml или ./config.yml

  2. ./.dtop.yaml или ./.dtop.yml

  3. ~/.config/dtop/config.yaml или ~/.config/dtop/config.yml

  4. ~/.dtop.yaml или ~/.dtop.yml

Примечание

Поддерживаются оба расширения: yaml и yml.

Пример конфигурации:

# Мониторинг продакшн-серверов с фильтрами и интеграцией Dozzle
hosts:
  - host: ssh://user@prod-server1
    dozzle: https://dozzle.prod-server1.com/
    filter:
      - status=running
      - label=environment=production

  - host: ssh://user@prod-server2
    dozzle: https://dozzle.prod-server2.com/
    filter:
      - status=running
      - label=environment=production

# Использовать иконки Nerd Font для улучшенного отображения
icons: nerd

Или мониторинг конкретных стеков приложений:

# Среда разработки — показывать только здоровые веб-сервисы
hosts:
  - host: local
    filter:
      - label=app=web
      - status=running
      - health=healthy

Дополнительные примеры — в config.example.yaml.

Иконки Nerd Font

dtop поддерживает Nerd Fonts для расширенного отображения иконок. Nerd Fonts — это шрифты, дополненные глифами и иконками, широко используемыми в терминальных приложениях.

Установка Nerd Fonts

  1. Перейдите на nerdfonts.com/font-downloads

  2. Скачайте пропатченный шрифт (например, «FiraCode Nerd Font» или «JetBrainsMono Nerd Font»)

  3. Установите шрифт в системе

  4. Настройте эмулятор терминала на использование Nerd Font

Использование иконок Nerd Font

Установив Nerd Font и настроив терминал, включите иконки Nerd Font в dtop:

# Через командную строку
dtop --icons nerd

# Или в файле конфигурации
icons: nerd
Примечание

Если иконки отображаются в виде квадратов или знаков вопроса, убедитесь, что в терминале выбран Nerd Font. Режим по умолчанию unicode работает с любым шрифтом терминала.

Поддерживаемые типы подключений

Локальный Docker

Мониторинг контейнеров на локальном демоне Docker с помощью --host local. dtop учитывает переменную окружения DOCKER_HOST. Если она не задана, используется путь к сокету по умолчанию (/var/run/docker.sock на Linux/macOS).

dtop --host local
# или просто
dtop

Удалённый Docker по HTTP

Подключение к удалённым демонам Docker по незашифрованному TCP. Удобно для сред разработки, но использовать следует только в доверенных сетях.

dtop --host tcp://host2:2375
Внимание

TCP-соединения не шифруются. Используйте их только в доверенных сетях или при наличии соответствующих правил файрвола.

Удалённый Docker по TLS

Подключение к удалённым демонам Docker по зашифрованному TLS-соединению. Требует настройки сертификатов через переменную окружения DOCKER_CERT_PATH.

export DOCKER_CERT_PATH=/path/to/certs  # Директория с key.pem, cert.pem и ca.pem
dtop --host tls://host2:2376

SSH

Подключение к удалённому хосту по SSH для мониторинга запущенных на нём контейнеров. Это рекомендуемый способ защищённого удалённого подключения.

dtop --host ssh://user@host
# С нестандартным портом
dtop --host ssh://user@host:2222

Несколько хостов

Можно одновременно мониторить несколько Docker-хостов, указав несколько флагов --host:

dtop --host local --host tcp://host2:2375 --host ssh://user@host
Примечание

На данный момент URL Dozzle можно задать только в файле конфигурации — передать его напрямую через флаги командной строки невозможно.

Метки Coolify и Dozzle

dtop считывает отображаемые имена и группы напрямую из Docker-меток без какой-либо дополнительной настройки:

  • Имя контейнера: dev.dozzle.name → coolify.serviceName → имя Docker-контейнера

  • Столбец Compose: dev.dozzle.group → coolify.projectName → com.docker.compose.project

Метки, состоящие только из пробелов или пустые, пропускаются. Это работает даже без настроенного URL Dozzle, в том числе после перезапуска контейнеров и переподключения хостов.

Похожие проекты и источники вдохновения

Я большой поклонник ctop. Именно ctop вдохновил меня создать Dozzle — браузерную альтернативу. Однако похоже, что ctop больше не поддерживается. Я рассматривал форк, но деплой под тем же именем был бы затруднён. dtop я создал для личных нужд: мне часто требуется видеть все свои контейнеры на нескольких хостах с первого взгляда. dtop решает эту задачу, поддерживая удалённые хосты через ssh и tcp. А поскольку я использую Dozzle, я встроил его в dtop, чтобы получить единый удобный инструмент для мониторинга логов контейнеров.

Участие в разработке

Мы приветствуем любой вклад! Не стесняйтесь присылать Pull Request.

Лицензия

Лицензия MIT — подробности в файле LICENSE.

© 2026 meganuke