ctop 0.7.7 常用 CLI 命令与工具详解

ctop 0.7.7 命令与 TUI 交互详解:全部启动参数与退出码实测、主网格/过滤/排序/容器菜单/单容器视图/日志/exec/列配置逐键操作实录、DOCKER_HOST 远程连接与 docker stats 组合用法。

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

ctop 0.7.7 常用 CLI 命令与工具详解

目标:把 ctop 的单命令用法与 TUI 全部交互键位一次讲透——启动参数(含逐个实测回显)、主网格、过滤、排序、容器菜单、单容器视图、日志、exec、列配置、配置保存、远程主机连接与容器管理操作,全部条目在 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)
  • ctop:0.7.7(官方发布二进制,build 11a1cb1)
  • 演示容器:nginx:alpine Web 服务(映射 8133→80)与一个 busybox CPU 负载循环
  • 界面帧说明:本文所有界面帧为终端逐字符捕获的实测文本,彩色高亮与数值随时间自然波动,帧内数值仅代表捕获时刻

二、工具概览

ctop 只有一个可执行文件、没有子命令体系:ctop [options] 一条命令进入 TUI。它的"命令体系"由两部分组成:

  1. 启动参数(flag):决定启动时的过滤、排序、连接器等初始状态,共 8 个(ctop -h 实测清单见 4.2);
  2. TUI 键位:进入界面后的全部操作靠键盘完成,主网格 13 键 + 容器菜单 7 项 + 单视图/日志视图若干键,完整键位表可随时在界面内按 h 查看内置帮助。

与 Docker 自带的 docker stats 相比:docker stats 是一次性 CLI(适合脚本),ctop 是交互式 TUI(适合人盯屏排查);两者读的是同一套 Docker stats 数据。需要把指标落盘时用 docker stats --no-stream(见第七章组合用法)。

三、前置条件

  1. ctop 已安装(安装路径与多方案见《Ubuntu 22.04 安装 ctop 0.7.7 指南》),ctop -v 可打印版本;
  2. 执行用户可访问 Docker 套接字(root 或 docker 组成员,否则界面弹权限错误框,见"九、常见问题"Q1);
  3. 在真实终端(SSH 会话)中运行——TUI 无法在管道/无 TTY 环境工作(实测 panic,见 Q4);
  4. 机器上有容器在跑才有内容可看。

四、启动参数详解

4.1 -v:版本信息并退出

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

退出码 0(echo $? 实测)。这是最常用的安装验证手段。

4.2 -h:帮助与参数全量清单

ctop -h
  -a    show active containers only
  -connector string
        container connector to use (default "docker")
  -f string
        filter containers
  -h    display this help dialog
  -i    invert default colors
  -r    reverse container sort order
  -s string
        select container sort field
  -v    output version information and exit
ctop - interactive container viewer

usage: ctop [options]

options:


available connectors: docker, runc

参数带取值的(-connector/-f/-s)在帮助里给出了真实默认值:连接器默认 docker,-f/-s 默认空(即从配置文件或程序默认值取)。退出码 0。

4.3 -a:仅显示运行中容器

默认情况下 ctop 把已停止的容器也列出来(行首 ⏹ 标记、指标为 -);-a 启动则只列运行态。实测对照(同一台机器,1 个已停止容器):

ctop -a    # 标题栏:22 containers(仅运行中)
  ctop - 05:20:52 UTC   22 containers
     NAME                           CID          CPU                          MEM                          NET RX/TX                    IO R/W                       PIDS UPTIME
   ⏵ alfio-2.0.2609-b1              b6d04888dbdd               0%                       723M / 31G         384M / 2M                    0B / 0B                      79   8h9m28s

启动后按 a 键可随时切换(实测切回含停止容器后标题变 23 containers),效果等同 allContainers 开关。

4.4 -f:初始过滤串

启动即按子串过滤,标题栏同步显示。实测 -f web(配置文件中的 filterStr = "ctop" 被参数覆盖,优先级实测见《ctop 0.7.7 配置参数详解》5.2):

ctop -f web
  ctop - 05:31:06 UTC   1 containers    filter: web
     NAME                           CPU                             MEM                             NET RX/TX                       IO R/W                          PIDS UPTIME
   ⏵ ctop-0.7.7-web                                0%                           12M / 31G            251K / 663K                     0B / 0B                         15   19m25s

4.5 -s:初始排序字段

合法值与界面排序菜单一致:cpu / id / io / mem / mem % / name / net / pids / state / uptime。实测 -s mem(按内存用量降序,三台容器按 156M→12M→3M 排列):

ctop -s mem
  ctop - 05:21:38 UTC   3 containers    filter: ctop
     NAME                           CPU                             MEM                             NET RX/TX                       IO R/W                          PIDS UPTIME
   ⏵ ctop-0.7.7-server                             0%                          156M / 31G           68M / 1M                        0B / 0B                         40   15m6s
   ⏵ ctop-0.7.7-web                                0%                           12M / 31G            250K / 663K                     0B / 0B                         15   9m54s
   ⏵ ctop-0.7.7-load                               96%                          3M / 31G            8K / 126B                       0B / 0B                         1    15m6s

传非法值在启动校验阶段直接报错退出(实测,退出码 1,界面不会打开):

ctop -s bogus
invalid sort field: bogus

4.6 -r:反向排序

与 -s 搭配改变排序方向(如 -s name -r 名字倒序)。实测 -r 生效后按 S 保存,配置文件 sortReversed 由 false 变 true,证明参数与配置开关同源:

  sortReversed = true

4.7 -i:反转默认配色

把亮/暗配色主题互换,适配深色或浅色终端背景。该参数改变的是颜色映射,文本捕获无法呈现,验证方式为在真实终端肉眼确认(启动不报错即生效)。

4.8 -connector:选择容器连接器

默认 docker;可选值在 ctop -h 尾行标注:available connectors: docker, runc。监控 Docker 容器无需改动;选择 runc 时依赖本机 /run/runc 状态目录,实测无该目录时界面弹错误框循环重连:

  ┌ ctop - error ──────────────────────────────────────────────────┐
  │  [05:17:55 UTC] open /run/runc: no such file or directory      │
  │  [05:17:55 UTC] attempting to reconnect...                     │

4.9 不存在的参数与退出码约定

0.7.7 没有 -H 参数(网上旧教程常误写)。实测:

ctop -H tcp://127.0.0.1:2375
flag provided but not defined: -H
Usage of ctop:
  -a    show active containers only
  -connector string
        container connector to use (default "docker")
  -f string
        filter containers
  -h    display this help dialog
  -i    invert default colors
  -r    reverse container sort order
  -s string
        select container sort field
  -v    output version information and exit

退出码 2。退出码约定实测汇总:-v/-h 正常退出 0;参数非法 1(如 -s bogus)或不被识别 2(如 -H);无 TTY panic 退出 2。

五、TUI 交互键位详解

以下每一条均在实测环境中按键操作并逐字符捕获界面帧。键位总表可随时按 h 查看(5.9 有全帧)。

5.1 主网格:列含义与状态符

默认视图(列组合可按 c 定制):

  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 时间、容器计数、当前过滤串(H 键开关,见 5.10);
  • 列:NAME(名称)、CID(短 ID)、CPU(百分比)、MEM(用量/上限)、NET RX/TX(累计收发)、IO R/W(累计读写)、PIDS(进程数)、UPTIME(运行时长);
  • 行首状态符:⏵ 运行中(可展开)、⏹ 已停止(指标显示 -);实测还观察到 ☼ 前缀,用于标注 docker compose 项目容器;
  • 上下移动:方向键或 vim 风格 j/k(源码 keys.go 键位映射,实测 j/k 可用)。

5.2 f:过滤容器

按 f 弹出底部 Filter 输入框(预填当前过滤串),输入即实时过滤。实测输入 ctop 后的界面(标题栏与输入框同时可见):

  ctop - 05:08:54 UTC   3 containers    filter: ctop
     NAME                           CID          CPU                          MEM                          NET RX/TX                    IO R/W                       PIDS UPTIME
   ⏵ ctop-0.7.7-load                8364c84613db              96%                        3M / 31G          7K / 126B                    0B / 0B                      1    1m54s
   ⏵ ctop-0.7.7-server              0e95c4a419b1               0%                       166M / 31G         67M / 857K                   0B / 0B                      19   1m54s
   ⏵ ctop-0.7.7-web                 8969b085486b               0%                       17M / 31G          8K / 126B                    0B / 0B                      13   1m55s
┌Filter────────────────────┐
│   ctop                   │
└──────────────────────────┘

清空与关闭(实测):Esc 关闭输入框(过滤条件保留);把框内文本逐字删空(退格)后回车即彻底清除过滤——实测清空后标题栏过滤提示消失、恢复全量列表。

5.3 s 与 r:排序字段与反向

按 s 弹出 Sort Field 菜单,实测全量选项(上下键移动、回车确认):

 ┌Sort Field───┐
 │             │
 │   cpu       │
 │   id        │
 │   io        │
 │   mem       │
 │   mem %     │
 │   name      │
 │   net       │
 │   pids      │
 │   state     │
 │   uptime    │
 │             │
 └─────────────┘

r 键随时反向当前排序;两者分别对应启动参数 -s/-r 与配置文件 sortField/sortReversed。

5.4 回车:容器操作菜单

在主网格选中某容器按回车,弹出操作菜单(实测全帧):

 ┌Menu─────────────────┐3 containers    filter: ctop
 │                     │
 │   [o] single view   │            CID          CPU                          MEM                          NET RX/TX                    IO R/W                       PIDS UPTIME
 │   [l] log view      │
 │   [s] stop          │            8364c84613db              96%                        3M / 31G          8K / 126B                    0B / 0B                      1    3m14s
 │   [p] pause         │            0e95c4a419b1               0%                       163M / 31G         67M / 857K                   0B / 0B                      19   3m14s
 │   [r] restart       │            8969b085486b               0%                       17M / 31G          8K / 126B                    0B / 0B                      13   3m14s
 │   [e] exec shell    │
 │   [c] cancel        │
 │                     │
 └─────────────────────┘

菜单项:单视图(o)、日志(l)、停止(s)、暂停(p)、重启(r)、进入 Shell(e)、取消(c)。s/p/r 是对容器的真实管理操作:实测选中负载容器按 s,弹出二次确认框(原文 stop container ctop-0.7.7-load?,选项 [c]ancel / [y]es),按 y 后容器被真实停止——宿主侧 docker ps -a 实测状态 Exited (137)。误操作防线就是这道确认框。

5.5 o:单容器视图

从容器菜单选 [o](或主网格按 o)进入单容器滚动视图,一屏从上到下:信息框、CPU 曲线、MEM、NET、IO、Env。实测(Web 容器,NET 面板在持续请求时捕获到 TX 速率条):

┌───────────────────────────────────────────────────────────────┐
│  id      | 9803b639bb39                                       │
│  name    | ctop-0.7.7-web                                     │
│  image   | nginx:alpine                                       │
│  ports   | 0.0.0.0:8133 -> 80/tcp                             │
│          | :::8133 -> 80/tcp                                  │
│  IPs     | ctop-077-net:10.89.58.2                            │
│  state   | running                                            │
│  created | Fri Oct 23 05:11:39 2026                           │
│  uptime  | 8s                                                 │
│  health  |                                                    │
└───────────────────────────────────────────────────────────────┘

指标面板结构(同一视图向下滚动实测):CPU 滚动曲线(左轴刻度自适应);MEM 当用量/上限;NET 两行速率 RX [0b/s]/TX [25.88kib/s](附柱状条);IO 两行 read/write [0b/s];最底部 Env 面板逐行列出容器环境变量(实测 nginx 容器含 NGINX_VERSION | 1.31.8 等行)。单视图内再按 o 返回主网格。

5.6 l:容器日志视图

主网格选中容器按 l 打开实时滚动日志(标题注明容器名)。实测 Web 容器的 nginx 访问日志:

┌Logs [ctop-0.7.7-web]────────────────────────────────────────────────────────────────────────────────────────────────────┐
│   10.89.58.4 - - [23/Oct/2026:05:12:24 +0000] "GET / HTTP/1.1" 200 896 "-" "curl/7.81.0" "-"   │
│   10.89.58.4 - - [23/Oct/2026:05:12:24 +0000] "GET / HTTP/1.1" 200 896 "-" "curl/7.81.0" "-"   │

视图内 t 键切换 Docker 时间戳前缀(实测切换后每行行首多出 2026-10-23T05:12:24.78Z 一类时间戳);q 退回。

5.7 e:exec 进入容器 Shell

容器菜单选 [e] 直接在容器内开 Shell。实测在 Web 容器执行命令与退出:

/ # hostname && uname -r && id -u
9803b639bb39
6.8.0-138-generic
0
/ #

Shell 会话结束后退出 Shell 即回到 ctop 界面。该功能等价 docker exec,是"看现场"到"查现场"的关键一步。

5.8 c:列配置面板

主网格按 c 打开 Columns 面板,实测全量 14 项:

 ┌Columns─────────────────────────────────┐
 │                                        │
 │   Re-order: <Page Up> / <Page Down>    │
 │                                        │
 │   Status Indicator               [X]   │
 │   Container Name                 [X]   │
 │   Container ID                   [X]   │
 │   Image name                     [ ]   │
 │   Exposed ports                  [ ]   │
 │   Exposed IPs                    [ ]   │
 │   Date created                   [ ]   │
 │   CPU Usage                      [X]   │
 │   CPU Usage (% of system total)  [ ]   │
 │   Memory Usage                   [X]   │
 │   Network RX/TX                  [X]   │
 │   Disk IO Read/Write             [X]   │
 │   Container PID Count            [X]   │
 │   Running uptime duration        [X]   │
 │                                        │
 └────────────────────────────────────────┘

[X] 为默认开启列;空格键切换勾选(实测取消 Container ID 后网格即时少一列)、Page Up/Page Down 调整列顺序(面板提示原文)、q 关闭。配合 S 保存后列组合写入配置文件 columns 键。

5.9 h:内置帮助(键位总表)

 ┌Help───────────────────────────────────────────────────────────────┐
 │                                                                   │
 │   <enter> - open container menu                                   │
 │                                                                   │
 │   [a] - toggle display of all containers                          │
 │   [f] - filter displayed containers                               │
 │   [h] - open this help dialog                                     │
 │   [H] - toggle ctop header                                        │
 │   [s] - select container sort field                               │
 │   [r] - reverse container sort order                              │
 │   [o] - open single view                                          │
 │   [l] - view container logs ([t] to toggle timestamp when open)   │
 │   [e] - exec shell                                                │
 │   [w] - open browser (first port is http)                         │
 │   [c] - configure columns                                         │
 │   [S] - save current configuration to file                        │
 │   [q] - exit ctop                                                 │
 │                                                                   │
 └───────────────────────────────────────────────────────────────────┘

(实测全帧;其中 [w] open browser 为官方 README 键位表未收录的键,功能为用首个 HTTP 端口打开浏览器,仅在带桌面环境的终端可用。)

5.10 H 与 S:顶栏开关与配置保存

  • H 键实测关闭顶部状态栏(标题栏整行消失,网格上移);再按恢复。对应配置文件 enableHeader。
  • S 键实测把当前过滤/排序/列组合/开关写入配置文件,底部提示 wrote config to /root/.ctop(存在 XDG_* 环境变量时写入 ~/.config/ctop/config 一类 XDG 路径,实测见《ctop 0.7.7 配置参数详解》5.1);下次启动自动加载。

5.11 q:退出

主网格按 q 退出程序回到 Shell;弹窗/输入框打开时 q 优先关闭当前弹层(帮助框、列面板、确认框实测均可 q 关闭)。

六、远程主机与连接器实战

ctop 默认连本机 /var/run/docker.sock;通过标准 Docker 环境变量 DOCKER_HOST 可改连远程守护进程(SSH 隧道套接字、TCP 等,与 docker CLI 约定一致)。实测把 DOCKER_HOST 指向不可达的 TCP 端点,界面弹错误框并持续重连(进程不退出):

DOCKER_HOST=tcp://127.0.0.1:2375 ctop
  ┌ ctop - error ──────────────────────────────────────────────────┐
  │  [05:17:43 UTC] cannot connect to Docker endpoint              │
  │  [05:17:43 UTC] attempting to reconnect...                     │

⚠️ 注意:远程主机连接同样要求该账户对远程 docker 套接字有访问权限;TCP 方式(2375)为明文无认证,生产环境建议改用 SSH 隧道转发 Unix 套接字后再连。

连接器选择用 -connector(docker/runc,见 4.8);runC 连接器另有 RUNC_ROOT、RUNC_SYSTEMD_CGROUP 两个环境变量(官方文档取值,默认 /run/runc)。

七、与 Docker 命令的组合使用

ctop 适合人看,脚本取数用 docker stats --no-stream。实测一条等价取数命令(取三台容器的 CPU/内存快照):

docker stats --no-stream --format 'table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}' $(docker ps --filter name=ctop-0.7.7 -q)
NAME                CPU %     MEM USAGE / LIMIT
ctop-0.7.7-web      0.00%     11.2MiB / 31.3GiB
ctop-0.7.7-server   0.00%     111.9MiB / 31.3GiB
ctop-0.7.7-load     99.84%    3.367MiB / 31.3GiB

组合建议:TUI 里发现异常容器 → 复制容器名 → 终端里用 docker inspect <名> 查完整元数据、docker logs 拉全量日志;ctop 的日志/exec 视图覆盖不了的场景(导出、历史)都在 Docker CLI 侧补齐。

八、注意事项

  1. s/p/r 是真实管理操作:容器菜单的 stop/pause/restart 会真实作用于目标容器(实测 stop 后宿主侧状态 Exited (137)),生产环境操作前看清选中行。
  2. S 保存的副作用:会把临时过滤串一并写入配置,下次启动自动带上;不希望保存时先清空过滤(见 5.2)。
  3. TUI 依赖 TTY:管道、定时任务中运行会 panic(回显见 Q4);无人值守取数用 docker stats。
  4. 退出码约定:-v/-h 返回 0;非法参数值 1、未知参数 2、无 TTY panic 2(均实测),可据此做安装探活。
  5. 普通用户权限:非 docker 组成员会持续弹 permission denied 重连框(见 Q1),不会自动退出。

九、常见问题(FAQ)

Q1:启动后一直弹 connect: permission denied?

实测错误框:

  │  [05:23:08 UTC] Get "http://unix.sock/info": dial unix /var/run/docker.sock: connect: permission denied  │
  │  [05:23:08 UTC] attempting to reconnect...                     │

当前用户不在 docker 组。解决:sudo usermod -aG docker <用户名> 后重新登录,或用 root 运行。

Q2:想连远程 Docker,-H 参数无效?

0.7.7 无 -H 参数(实测回显与退出码见 4.9)。正确做法:DOCKER_HOST=tcp://<主机>:2375 ctop 或 SSH 隧道 ssh -L /tmp/docker.sock:/var/run/docker.sock <主机> 后 DOCKER_HOST=unix:///tmp/docker.sock ctop。

Q3:-s 传了字段名却启动失败?

字段名必须在十个合法值内(cpu/id/io/mem/mem %/name/net/pids/state/uptime),实测非法值报 invalid sort field: bogus 且退出码 1。注意 mem % 含空格与百分号,Shell 里要加引号:ctop -s 'mem %'。

Q4:脚本里调用 ctop 报 panic?

实测回显:

panic: open /dev/tty: no such device or address [recovered]
        panic: open /dev/tty: no such device or address

TUI 无法脱离终端运行;脚本取数改用 docker stats --no-stream(第七章实测命令)。

Q5:过滤串输错了怎么清?

按 f 打开输入框(预填当前串),退格清空后回车即恢复全量列表(实测标题栏过滤提示消失);或直接改配置文件 filterStr = "" 后重启。

十、参考链接