本节摘要:docker version 报告客户端与服务端各自的版本,docker info 报告守护进程的运行时全景。这组命令零参数、零风险,却是排查"命令不存在""连不上守护进程"这类问题的第一现场。本节给出完整词条、字段级解读与真实会话。
本节是全书的开篇词条,位于壹部的起点:先让 Docker 介绍自己,后面的镜像与容器词条才有稳定的落脚点。读完这节,你拿到任何一台陌生机器,都有一条固定的"望闻问切"路径。
docker version [OPTIONS]
义项(常用选项):
| 选项 | 含义 | 使用时机 |
|---|---|---|
| 无参数 | 输出客户端与服务端两段完整信息 | 日常检查 |
--format 字符串 |
用 Go 模板抽取指定字段 | 脚本里取版本号 |
--help |
显示本命令帮助 | 忘记选项时 |
$ docker version Client: Version: 26.1.4 API version: 1.45 Go version: go1.21.11 OS/Arch: linux/amd64 Context: default Server: Engine Version: 26.1.4 storage driver: overlay2
解读这段输出的要点有三个。第一,输出分成 Client 与 Server 两段——docker 命令行只是个客户端,真正干活的是后台的守护进程,两段版本可以不同,比如装了新版客户端、守护进程还是旧的。第二,API version 是客户端与守护进程协商用的接口版本,两边差距过大时会直接报错。第三,如果 Server 段没有打出来,而是一段报错,说明守护进程没起来,这属于 1.2 的安装验证要解决的问题。
$ docker version --format '{{.Server.Version}}' 26.1.4
--format 后面跟的是 Go 模板,.Server.Version 表示取服务端版本字段。这个写法在 CI 脚本里很常见:判断版本是否满足要求,只留一行干净输出,省去解析整段文本。
版本错位本身值得一提。客户端与守护进程可以分别升级,于是出现"新客户端问老服务端"的组合:客户端带着新的 API 版本去协商,服务端只认得旧的,差距过大就报"client version too new"一类错误。处理思路有固定的优先级:先确认两边版本号(本节命令),再看 API version 是否匹配,最后才考虑降级客户端或升级服务端。把判断顺序记牢,遇到报错就不会先去重装 Docker。
$ docker version Client: Version: 26.1.4 OS/Arch: linux/amd64 Server: ERROR: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
注意 Client 段照常输出——客户端本身工作正常,失败的是与守护进程的连接。这条报错是全书出场率最高的错误之一,遇到它先去查服务状态,而不是怀疑命令敲错了。
docker info [OPTIONS]
义项:--format 同样支持模板抽取;无参数时输出几十行系统级事实。它回答的问题比 version 宏观得多:这台机器上 Docker 跑成什么样了。
$ docker info Client: Version: 26.1.4 Server: Containers: 14 Running: 9 Paused: 0 Stopped: 5 Images: 63 Server Version: 26.1.4 Storage Driver: overlay2 Cgroup Driver: systemd Cgroup Version: 2 Kernel Version: 6.1.0-23-amd64 Operating System: Debian GNU/Linux 12 (bookworm) Total Memory: 15.36 GiB Docker Root Dir: /var/lib/docker
逐块读这份输出。Containers 块给出容器总量与运行、暂停、停止的分布——Running 长期为零而 Stopped 一直堆积,说明有该清理的尸体(捌部的 prune 词条处理)。Images 是本地镜像数量,配合 Docker Root Dir 所在磁盘的剩余空间看,能预判"磁盘被镜像吃满"这类事故。Storage Driver 是 overlay2 就对了,老机器上若还是 aufs 或 device mapper,升级时要格外小心。Cgroup Driver 与 Cgroup Version 影响资源限制参数的行为,装 Kubernetes 的同学尤其要核对这一行。
$ docker info --format '{{.Containers}} {{.Running}}' 14 9
两个数字依次是容器总数与运行中数量。写监控脚本或巡检报告时,这种单行输出最省事。
| 维度 | docker version | docker info |
|---|---|---|
| 回答的问题 | 跑的是什么版本 | 跑成什么状态了 |
| 独有信息 | API 版本、Go 版本、Context | 容器/镜像计数、存储驱动、内核、内存、根目录 |
| 典型场景 | 升级前核对、兼容性确认 | 巡检、容量评估、故障初判 |
| 输出体量 | 十来行 | 几十行 |
⚠️ 常见坑:把
docker version当成docker info用,盯着它找容器数量——两命令回答的问题不同,字段互不重叠,混用只会白翻一遍输出。
下一节把镜头拉到装机当天:怎么用一组命令确认 Docker 装好、能用、开机自启。