ctop 介绍与选型指南

ctop 终端容器监控工具介绍:定位、核心架构、功能特性、快速开始、适用场景与限制,并给出与 docker stats、lazydocker、dry、Portainer 的量化选型对比。

ctop应用监控可观测性容器监控2026/10/23

ctop 介绍与选型指南

目标:讲清楚 ctop 是什么、能做什么、适合谁用,并与 docker stats、lazydocker、dry、Portainer 等同类工具做量化选型对比——已在 Ubuntu 22.04(x86_64,Docker Engine 29.8.1)环境实测通过,文内命令与回显均为实测记录。

一、环境信息

本章列出演示与实测环境的关键信息,便于对照复现。

  • 操作系统:Ubuntu 22.04(x86_64),内核 6.8.0-138-generic
  • 容器运行时:Docker Engine 29.8.1(API 1.56)
  • 监控对象:Docker 守护进程上运行中的若干容器(含 nginx:alpine Web 服务与一个 busybox CPU 负载循环)
  • ctop 版本:0.7.7(ctop version 0.7.7, build 11a1cb1 go1.18,官方发布二进制)
  • 版本/星数等社区数据查询日期:2026-10-23(来源均为 GitHub 仓库页面与 releases.atom,见各处标注与文末参考链接)

二、软件概述

ctop 是一款类 htop 的容器指标 TUI(终端用户界面)监控工具,由 Bradley Cicenas(bcicen)以 Go 语言开发,MIT 许可证开源,仓库地址 https://github.com/bcicen/ctop 。它在一屏终端内以表格网格实时滚动展示多台容器的 CPU、内存、网络收发、磁盘 IO、进程数与运行时长,并支持进入单个容器查看滚动明细、日志、执行 Shell 等操作。

💡 技术拓展:终端环境下的"监控工具"按交互形态可分为四类,各有取舍——

形态代表工具特点适用场景
top 类 TUIctop、htop、lazydocker键盘交互、实时刷新、零依赖浏览器SSH 排障、单机巡检
一次性 CLI 命令docker stats、ps按需执行、易脚本化、无交互自动化脚本、快速看一眼
Web 面板Portainer、Contana图形界面、可远程、支持管理操作团队共享、多集群管理
主机/全景仪表盘glances、bottom、sampler面向主机与多数据源,容器只是其中一角整机资源全景

ctop 属于第一类"top 类 TUI",专注容器这一个监控对象;若需要的是整机监控(CPU/磁盘/网络/传感器等),容器只是附带视图,则应看主机型工具如 《glances 介绍与选型指南》、《bottom 介绍与选型指南》 或可编程仪表盘 《sampler 介绍与选型指南》。

项目活跃度(实查 GitHub,2026-10-23):

  • Star 数:17,845(仓库页面 stargazerCount,2026-10-23)
  • 最新稳定版:v0.7.7,发布于 2021-07-01(releases.atom 实查)
  • releases 流最后更新时间:2022-03-22
  • 主分支:master;License:MIT(仓库页面实查)

⚠️ 维护状态必须如实说明:ctop 自 2021 年 7 月的 v0.7.7 之后长期未再发布新版本,属于低维护状态。但工具本体功能完整、二进制体积小(约 13.6 MB)、无复杂依赖,在当前 Docker Engine 上仍可正常工作(本文全部实测基于 v0.7.7 通过),作为"随手查容器状态"的轻量工具依然可靠;若需要持续演进的新特性(如更多连接器),应把"项目停更"纳入选型风险评估。

三、核心架构

本章从源码与官方文档出发,拆解 ctop 的三层结构:连接器(connector)、配置(config)与终端界面(TUI)。以下描述依据 bcicen/ctop master 分支源码与 _docs/connectors.md(查询日期 2026-10-23),并经本地实测印证。

  1. 连接器层(connector):ctop 通过"连接器"抽象对接不同的容器运行时,启动参数 -connector 指定,实测默认值与可选值来自 ctop -h 回显:-connector string container connector to use (default "docker")、available connectors: docker, runc。
    • Docker 连接器(默认):走标准 Docker 环境变量对接守护进程,官方 connectors 文档明确支持 DOCKER_HOST(默认 unix://var/run/docker.sock),因此远程主机、TCP、SSH 隧道等 Docker CLI 支持的连接方式对 ctop 同样适用。
    • runC 连接器:直接读取本机 runC 容器状态目录,官方文档说明需对本机 runC root 目录(默认 /run/runc)的完整访问权限,另有两个环境变量 RUNC_ROOT(runc 根目录)与 RUNC_SYSTEMD_CGROUP(置位后启用 systemd cgroups)。实测在无 /run/runc 的机器上选择 runc 连接器,界面弹出错误框 open /run/runc: no such file or directory 并反复重连——可见连接器失败不会让进程退出,而是在 TUI 内持续提示。
  2. 数据层:以 Docker 连接器为例,ctop 周期调用 Docker Engine HTTP API 拉取容器列表与实时统计(等价于 docker stats 底层使用的 stats 数据流),换算为 CPU%、MEM 用量/上限、NET RX/TX、IO R/W、PIDS、UPTIME 等指标后供界面渲染;单容器视图再补充镜像、端口、IP、创建时间、健康状态与环境变量等静态元信息(实测见第五章单视图帧)。
  3. 界面与配置层:界面基于 gizak/termui(ctop 维护的 fork)绘制网格、弹窗与滚动图;按键处理集中在源码 keys.go,统一映射 up/down(支持 vim 风格 j/k)、pgup/pgdown、exit(q/Ctrl-c/Esc)、help(h/?);配置模块(源码 config/file.go)负责把当前过滤串、排序字段、列开关等状态以 TOML 格式存盘并在下次启动读取,默认路径规则实测确认:
    • 环境中存在任意 XDG_* 变量时:$XDG_CONFIG_HOME/ctop/config(未设 XDG_CONFIG_HOME 则 $HOME/.config/ctop/config);
    • 否则:$HOME/.ctop。

💡 说明:上述"存在任意 XDG_* 环境变量即走 XDG 路径"的判断来自源码 config/file.go 的 xdgSupport()(正则 ^XDG_* 匹配环境变量名),并经实测印证——在未设 XDG 变量的服务器 Shell 中按 S 保存,提示 wrote config to /root/.ctop;设置 XDG_CONFIG_HOME=/root/xdgtest 后保存,提示 wrote config to /root/xdgtest/ctop/config。

四、功能特性

以下特性全部在实测环境中逐项操作验证过(操作过程与回显详见《ctop 0.7.7 常用 CLI 命令与工具详解》,此处列结论):

  • 多容器实时网格:单屏滚动展示所有(或过滤后的)容器的 CPU/MEM/NET/IO/PIDS/UPTIME,默认约每秒刷新一次;行首以图标区分运行状态(⏵ 运行中、⏹ 已停止,☼ 标记 compose 项目容器)。
  • 实时排序:菜单可选排序字段 cpu / id / io / mem / mem % / name / net / pids / state / uptime,支持反向排序(r 键或 -r 参数)。
  • 动态过滤:f 键弹出过滤框按子串实时过滤(启动参数 -f 可带初始过滤串),实测过滤后标题栏显示 3 containers filter: ctop。
  • 单容器视图:从容器菜单进入,一屏滚动展示 id/name/image/ports/IPs/state/created/uptime/health 信息框与 CPU 曲线、MEM、NET(含 RX/TX 速率)、IO、Env 环境变量面板。
  • 容器日志视图:实时滚动查看容器日志,t 键切换 Docker 时间戳前缀(实测 nginx 访问日志时间戳开/关对比)。
  • 容器操作:容器菜单内置 stop / pause / restart / exec shell 等操作入口,实测 exec 可直接进入容器 Shell 执行命令。
  • 列自定义:c 键打开 Columns 面板,14 个列项按空格勾选、PageUp/PageDown 调整顺序,实测关闭 Container ID 列后网格立即少一列。
  • 配置持久化:S 键把当前过滤/排序/列开关/顶栏开关等写入配置文件,下次启动自动加载(实测重启后标题栏自动带出 filter: ctop)。
  • 内置帮助:h 键弹出全部键位表;H 键开关顶部状态栏。
  • 多连接器与远程主机:默认对接本机 Docker;通过 DOCKER_HOST 环境变量可监控远程守护进程。

五、快速开始

本章给出从零到看到监控画面的最短路径:下载官方二进制 → 验证版本 → 启动查看网格。完整安装方案对比见《Ubuntu 22.04 安装 ctop 0.7.7 指南》(Ubuntu 22.04 多路径实测)。

5.1 前置条件

  • 一台装有 Docker Engine 的 Linux 服务器(本文为 Ubuntu 22.04),且有运行中的容器可供观察;
  • 执行用户能访问 Docker 套接字:root 直接可用;普通用户需加入 docker 组(sudo usermod -aG docker <用户名> 后重新登录);
  • 终端交互环境(TUI 程序必须运行在真实 TTY 中,不能重定向管道执行)。

5.2 下载并安装二进制

官方 README 给出的 Linux 通用安装方式是直接下载 GitHub Releases 里的平台二进制并放到 PATH 目录(以下命令与输出均为实测,文件大小 13606047 字节):

sudo curl -fL https://github.com/bcicen/ctop/releases/download/v0.7.7/ctop-0.7.7-linux-amd64 -o /usr/local/bin/ctop
sudo chmod +x /usr/local/bin/ctop

验证安装(实测回显):

ctop -v
ctop version 0.7.7, build 11a1cb1 go1.18

5.3 启动并观察

直接运行 ctop(无参数)即进入全容器网格;此处以 -f 带初始过滤串启动,只显示名字含 ctop 的三个容器(实测帧,数值随机器与时间变化):

ctop -f ctop
  ctop - 05:20:36 UTC   3 containers    filter: ctop
     NAME                           CPU                             MEM                             NET RX/TX                       IO R/W                          PIDS UPTIME
   ⏵ ctop-0.7.7-load                               0%                           3M / 31G            8K / 126B                       0B / 0B                         1    14m7s
   ⏵ ctop-0.7.7-server                             0%                          156M / 31G           68M / 1M                        0B / 0B                         28   14m7s
   ⏵ ctop-0.7.7-web                                0%                           12M / 31G            250K / 663K                     0B / 0B                         15   9m54s
  • 标题栏:程序名、UTC 时间、容器计数与当前过滤串;
  • 指标列:CPU、MEM(用量/上限)、NET RX/TX(累计)、IO R/W(累计)、PIDS、UPTIME;
  • 按 q 退出。

⚠️ 注意:在无终端的管道/定时任务环境直接运行 ctop 会触发 panic(实测回显 panic: open /dev/tty: no such device or address,退出码 2)。监控数据需要进脚本时请改用 docker stats --no-stream 等命令行形态。

六、适用场景与限制

6.1 适用场景

  • 单机容器排障:SSH 登上服务器后一条命令看清"哪个容器在吃 CPU/内存",按 CPU/内存排序直达元凶,再进单视图看日志或 exec 进容器查现场,全程不离开终端。
  • 轻量巡检与值班快速查看:无需部署任何服务端,一个 13.6 MB 二进制拷贝即用,适合跳板机、CI 构建节点、边缘小主机。
  • 容器教学与演示:界面直观(类 htop),键位少,适合在演示环境中讲解容器资源隔离与 cgroups 指标。

6.2 限制

  • 仅单守护进程视角:一次只连一个 Docker endpoint(默认本机套接字,或 DOCKER_HOST 指定的远程端点),没有多主机聚合视图。
  • 无历史数据与告警:指标只在界面刷新周期内滚动,不落盘、无时序存储、无告警通知;需要历史曲线与告警应选 Prometheus + Grafana 类方案。
  • 无指标导出:TUI 不提供 CSV/JSON 导出通道,进脚本请用 docker stats。
  • 交互依赖 TTY:必须人在终端里操作(见 5.3 的 panic 实测)。
  • 项目停更:v0.7.7(2021-07-01)后再无发布,新版本 Docker 特性(如新 cgroup 驱动细节)无跟进修复承诺(实测当前仍兼容 Docker Engine 29.8.1)。
  • runC 连接器实用性有限:需要直接访问 /run/runc 状态目录,一般仅 root 可用,且看不到 Docker 层的镜像/端口元信息。

七、同类选型对比

本章对 ctop 与常见替代品做量化对比。星数统一取自 shields.io GitHub stars 数据(JSON 端点,查询日期 2026-10-23);ctop 版本与发布时间实查自 GitHub Releases(releases.atom,2026-10-23)。

工具形态监控对象核心操作能力使用前提维护状态(2026-10-23 实查)GitHub Stars
ctop终端 TUI单个 Docker(或 runC)守护进程的容器查看、排序、过滤、日志、exec、stop/pause/restart单二进制,需 TTY 与 docker.sock 访问权最新版 v0.7.7(2021-07-01),低维护17,845
docker stats内置 CLI 命令本机 Docker 容器只读指标表(--no-stream 可脚本化)随 Docker 自带,零安装随 Docker Engine 持续维护—(内置命令)
lazydocker终端 TUI单个 Docker(含 docker-compose 项目聚合)查看、日志、exec、重启/重建容器与服务单二进制,Go 编写持续活跃维护53k
dry终端 TUI单个 Docker 守护进程的容器/镜像/网络/卷查看与管理(启停、清理)、可当 Docker 监控面板单二进制低频更新3.3k
Portainer CEWeb 面板多环境 Docker/Kubernetes/Swarm全量管理 + 监控仪表盘 + 多用户权限部署服务端(容器化),浏览器访问持续活跃,有商业支持39k

选型解读:

  • 只看指标、最小依赖:docker stats 零成本,但无交互与单容器深钻能力;
  • 终端里"看 + 管"一条龙:ctop 与 lazydocker 同形态,lazydocker 社区更活跃、功能更全(compose 服务级操作);ctop 更轻、界面更接近 htop,单容器滚动视图(CPU/NET 曲线 + Env 面板)是特色,但需接受停更风险;
  • 需要多容器/多环境统一管理、给非运维同事用:Portainer 这类 Web 面板更合适,代价是要部署并维护一个服务端;
  • 监控对象不是容器而是整机:请回到主机型工具(glances / bottom / sampler,见第二章技术拓展处的站内链接)。

「如果……则……」速查:

  • 如果只是临时看一眼某台机器容器谁占资源 → docker stats;
  • 如果经常在终端里排查容器问题、喜欢 htop 手感、能接受低维护 → ctop;
  • 如果要 compose 项目级管理与更高频的社区更新 → lazydocker;
  • 如果团队需要网页访问、权限分级的容器管理台 → Portainer;
  • 如果监控需求是整机资源与多数据源仪表盘 → glances / bottom / sampler。

八、参考链接