简介:Kitematic 0.17.11 是面向 Mac 平台的 Docker 图形化管理工具,采用一键式安装方式,帮助不熟悉命令行的开发者快速在 Mac 上运行 Docker 并管理容器,同时为资深用户保留命令行无缝切换能力。资源包为 zip 压缩,共包含 182 个文件,内有 70 个 C 语言头文件、55 个资源数据文件、Electron 框架组件、二进制动态库、plist 配置文件、日志及内核数据文件等,整体大小约 56.37MB;这些文件覆盖应用运行所需的底层依赖,安装后即可获得完整的图形用户界面,目录安排也便于按需查看组件。功能方面,工具允许在图形界面直接搜索并拉取 Docker Hub 镜像,快速创建与运行应用容器,自动映射主机端口、直观修改环境变量、配置数据卷,还能一键打开容器终端、简化日志输出;通过图形界面即可完成原本需要输入多行命令的操作,同时支持与 Docker CLI 无缝切换,便于脚本化自动化。从适用人群看,它既适合初学者借助可视化方式落地容器技术,也适合日常开发者更高效地管理多个应用容器。当前已有 294 人学习下载,对于希望降低 Docker 使用门槛的 Mac 用户具有直接实用价值。
1. Kitematic 0.17.11:Mac 上把 Docker 装进图形窗口的老牌解方
Kitematic 0.17.11 是 Docker 官方在 macOS 上做“一键式安装并运行 Docker”的初代图形客户端:它把 docker-machine、VirtualBox 虚拟机和 Docker CLI 全部收进 Kitematic.app 这一个窗口里,用户不需要敲 docker run,点几下鼠标就能把 Nginx、MySQL、Redis 这类常用容器跑起来。这个版本在 2018 年之后停止更新,但我最近在几台老款 Intel Mac 上做本地开发环境时反而把它翻了出来——原因很直接:Docker Desktop 在这些机器上启动就要吃掉 2GB 左右内存,而 Kitematic 管理的是一个由 VirtualBox 承载的轻量 Linux 虚拟机,只在需要时拉起来,界面直观、资源占用克制。它特别适合完全不想碰命令行的入门者,也适合在培训或演示环境里用鼠标点给同事看“容器到底是什么”。当然它在 macOS 新版本上有不少让人挠头的坑,下面我把原理、安装步骤和踩坑记录一次讲透。
2. Mac 上的 Docker 引擎为什么“住”在虚拟机里:Kitematic 的选型逻辑
2.1 macOS 原生跑不了容器,这一条决定了 Kitematic 的所有设计
Docker 的底层是 Linux 内核的 namespaces 和 cgroups:前者隔离进程、网络、挂载点等视图,后者限制 CPU、内存和 IO。macOS 的 Darwin 内核虽然也是 Unix 系,但没有这两套机制,所以在 Mac 上跑 Docker 容器,必须先在本地运行一个 Linux 虚拟机,再由虚拟机里的 Docker daemon 承载容器。这是所有 Mac 版 Docker 方案绕不开的底层现实。
Kitematic 0.17.11 选择的承载者是 VirtualBox。它没有像后来的 Docker Desktop 那样直接使用 macOS 的 Hypervisor.framework,而是继承了 Docker Toolbox 时代的老思路:用 docker-machine 创建一个名为 default 的 VirtualBox 虚拟机,虚拟机里跑一个裁剪过的 Linux 发行版(boot2docker,基于 Tiny Core Linux),里面只预装 Docker daemon。Kitematic 主界面连接的就是这个虚拟机里的 daemon。
“一键式安装”这个说法的本质,是把以下五个动作打包成一次自动流程:
- 检查本机是否已安装 VirtualBox 和 docker-machine;
- 检查是否存在名为 default 的虚拟机;
- 不存在则调用 VBoxManage 创建虚拟机,分配内存、CPU、磁盘,并挂载 boot2docker ISO 启动;
- 等待 VM 内 Docker daemon 就绪;
- Kitematic 客户端默认通过 tcp://192.168.99.100:2375 连接 daemon,然后罗列镜像和容器。
我一开始以为 Kitematic 是个简单的“容器管理工具”,后来看日志才明白它同时承担了“Docker 引擎托管器”的角色。窗口里点击重置、重启,重启的是 VirtualBox 里那台 Linux VM,而不只是某个容器进程。这个区分非常重要,因为遇到端口不通、容器消失、pull 很慢等故障时,排查范围直接决定了效率。
2.2 Kitematic 0.17.11 的组件拆解
我习惯把 Kitematic 0.17.11 理解成“三件套的图形外壳”:Kitematic.app 只是最外面那一层,真正的干活组件是 docker-machine、VirtualBox 和 Docker CLI。下面的表列清了哪些文件需要安装时单独准备:
| 组件 | 角色 | 是否包含在 Kitematic zip 内 |
|---|---|---|
| Kitematic.app | 图形客户端 | 包含,核心主程序 |
| docker-machine | 创建和管理 default 虚拟机 | 不打包,通常随 Docker Toolbox 提供 |
| Docker CLI | 命令行客户端,GUI 背后依赖它下发指令 | 不打包,需自行准备 |
| VirtualBox | 虚拟机承载层 | 不包含,必须提前安装 |
| boot2docker ISO | 虚拟机镜像,内部运行 Docker daemon | 不包含,首次创建 VM 时自动下载 |
实际部署时,很多人只拿到了 Kitematic-0.17.11-Mac.zip 这个独立包,说明下载方已经假定 VirtualBox 和 Docker CLI 由使用者自己搞定。我的做法是:不装完整的 Docker Toolbox,因为 Toolbox 携带的 docker-machine、docker-compose 版本非常旧,后面升级麻烦;只装 VirtualBox,再单独准备一份较新的 Docker CLI 二进制放到 /usr/local/bin。这样既能满足 Kitematic 的依赖,又保留了命令行的更新自由度。
2.3 为什么 Kitematic 比 Docker Desktop 轻
Docker Desktop for Mac 走的是 Apple Virtualization.framework 或 HyperKit 这类轻虚拟化框架,内核更贴近 macOS,用户态更流畅,但它额外集成了 Kubernetes、构建扩展、登录认证、自动更新等模块,安装包超过 1GB,常驻进程多,启动后内存占用明显。
Kitematic 0.17.11 只是一个瘦客户端,Docker daemon 运行在 VirtualBox VM 中,VM 的资源配额由用户自行控制,默认只分配 2GB 内存。在 4GB 内存的老 Mac 上,这种“按需启动虚拟机”的方式要比 Docker Desktop 的常驻方案现实得多。缺点是容器与宿主机的文件交互、端口转发都依赖 VirtualBox,性能和兼容性都比较“有年代感”。
2.4 与 Docker Desktop 的对比选型清单
我没法断言“Kitematic 一定比 Docker Desktop 好”,因为两者根本就不是同一代产品。下面这张表是我根据实际使用体验整理出的判断依据:
| 对比项目 | Kitematic 0.17.11 | Docker Desktop for Mac |
|---|---|---|
| 虚拟化承载 | VirtualBox 5.x/6.x | Apple Virtualization / HyperKit |
| 安装体积 | 仅 GUI 很小,仍需 VirtualBox | 安装包约 1GB,附加组件多 |
| 对老 macOS 的支持 | 支持 macOS 10.10 及以上 | 新版本要求 macOS 11+ |
| 容器编排 | 无 Kubernetes,compose 支持有限 | 内置 Kubernetes 与 Compose |
| 资源占用 | 仅 VM 开机时占用,可手动限制内存 | 常驻进程多,内存占用高 |
| 更新频率 | 2018 年停止维护 | 持续迭代 |
结论是:新 Mac 上我不会推荐 Kitematic;但如果你手头是一台 2015 年前后的 Intel Mac,且只做本地开发验证,Kitematic 0.17.11 依然是一个值得留着的“轻量应急方案”。
3. 安装与首跑:从 Kitematic-0.17.11-Mac.zip 到第一个容器
3.1 安装前先检查硬件虚拟化
VirtualBox 要运行 boot2docker,CPU 必须支持并启用 VT-x(Intel 平台)。2012 年以后的 Mac 默认开启,但某些老机器可能在固件层面被关掉。我会先跑两条命令确认:
# 查看 macOS 是否支持 Hypervisor.framework,返回 1 表示支持 sysctl kern.hv_support # 查看 CPU 型号,判断是否具备虚拟化扩展 sysctl -n machdep.cpu.brand_string如果 kern.hv_support 返回 0,VirtualBox 仍然可以运行,但只能走软件虚拟化,性能断崖式下跌。此时需要进入 macOS 恢复模式或使用启动键进入 EFI 设置,确认固件里 VMX/VT-x 被启用。这一步检查花不到一分钟,能避免后续创建 VM 时一直卡在 VirtualBox 报错“VT-x is not available”这种黑匣子问题。
3.2 解压安装:把 Kitematic.app 放入应用程序目录
Kitematic 0.17.11 的安装过程并不需要 dmg 挂载或安装器,本质上就是解压。建议用命令行解压,方便观察归档内部内容,也方便确认文件完整性:
# 解压到当前目录 unzip Kitematic-0.17.11-Mac.zip # 把应用放进 /Applications mv Kitematic.app /Applications/解压得到的 Kitematic.app 内部带有与 0.17.11 版本匹配的 docker 相关组件,但路径隐藏在 Contents 目录下,不适合直接暴露给系统命令行。移动完成后从 Launchpad 或 Finder 双击打开,macOS 首次运行会弹出“来自互联网的 App”警告。此时右键点击图标选择“打开”即可,不需要修改安全策略。
3.3 首次启动:自动创建 default 虚拟机
打开 Kitematic 后,如果本机不存在 default 虚拟机,程序会自动触发 docker-machine create 流程。这一步在我的 2015 款 Intel i5 Mac 上大约需要 3 到 5 分钟,最耗时的是下载 boot2docker ISO。当窗口左下角出现 Docker Hub 搜索区域,并且容器列表区域不再转圈,说明 daemon 已就绪。
如果公司网络限制了 GitHub 下载,界面会一直停在“Downloading Docker ISO”。这种情况我一般不干等,而是手动下载 boot2docker.iso 后用 VBoxManage 给 VM 挂载:
VBoxManage storageattach default \ --storagectl "SATA" \ --port 0 \ --device 0 \ --type dvddrive \ --medium "$HOME/Downloads/boot2docker.iso" docker-machine restart default docker-machine regenerate-certs default回到 Kitematic 窗口,程序检测到 default 虚拟机已存在,会自动跳过创建步骤进入连接状态。注意:这里的 storageattach 命令不要照抄,如果你的 VM 存储控制器的名称不是 SATA,先用 VBoxManage showvminfo default 查看实际名称再替换。
3.4 偏好设置:内存、CPU 与镜像加速
Kitematic 右上角 Preferences 里有几个关键参数,对应 VirtualBox VM 的资源配额。我在这台老 Mac 上的做法是:
- CPU 核数设置为 2,不让 VM 和宿主机抢核心;
- 内存设为 2048 MB,跑 MySQL 和 Redis 单容器足够;
- Registry Mirror 填入公司内网镜像仓库地址或公共镜像加速地址(如果有)。Kitematic 会把配置写入 VM 内 daemon 的参数中并触发 reload,约 10 秒后生效。
需要注意,模块里的内存、CPU 修改,实际是通过 VBoxManage modifyvm 执行,必须重启 VM 才生效。我习惯改完内存后用 docker-machine ls 验证,看 MEMORY 列是否变成预期值:
docker-machine ls3.5 首次拉取并运行 Nginx 容器
Kitematic 的 Docker Hub 页面自带搜索框,输入 nginx,选中官方镜像,右侧创建表单出现容器名和端口配置。默认 Hub 页会把容器端口 80 映射到宿主机 1080 之类的随机端口,我手动改为 8080,然后点 Create。背后等效执行的命令大致是:
docker run -d -p 8080:80 --name my-nginx nginx:latest点 Create 后,Kitematic 容器列表出现 my-nginx,状态运行,浏览器访问 VM IP 加端口即可看到 Nginx 默认页。这里有一个容易误导的地方:Kitematic 界面显示的访问地址可能是 localhost:8080,但在 VirtualBox NAT 端口转发尚未完全配置好的情况下,更可靠的是使用 VM 的 IP:
docker-machine ip default通常是 192.168.99.100,浏览器访问 http://192.168.99.100:8080。如果这个地址能打开 Nginx 页面,说明整个“GUI → daemon → 容器 → 端口转发”链路已经打通。
4. 日常操作:镜像、容器、端口与日志的管理路径
Kitematic 的 GUI 把容器操作压缩成了四个高频动作:搜索镜像、创建容器、看日志、进终端。我在这台 Mac 上连续用了一周,把所有日常操作都映射到对应位置,归纳如下。
4.1 镜像管理的正确姿势
在 Kitematic 的 Docker Hub 页面搜索镜像,选中后点 Create,就会自动拉取并启动容器。但镜像管理还有几个隐藏入口:
- 镜像列表在左侧 “My Repos” 中,显示本机已 pull 的镜像;
- 删除镜像需要先删除对应容器,Kitematic 会在容器详情页提供删除;镜像删除则要在镜像列表页操作;
- 手动 pull 不存在的镜像时,Kitematic 可能不显示进度,只会在创建容器时卡住。遇到这种情况,我会切到命令行 docker pull 查看真实进度。
# 从命令行手动拉取镜像,便于看到分层下载进度 docker pull mysql:8.0为什么 GUI 会卡住?因为 Kitematic 的创建流程会同时执行“拉镜像→建容器→起容器”三个动作,任何一步没有返回,界面都不给中间态。这是 Kitematic 用起来最隐晦的地方:进度条不告诉你卡在哪一步,只能通过 CLI 交叉验证。
4.2 MySQL 容器:环境变量和数据卷是关键
数据库容器不像 Nginx 那么简单,两条配置容易翻车:root 密码必须在首次启动前通过环境变量注入;数据目录必须挂载到宿主机。Kitematic 创建 mysql:8.0 时,表单会自动识别镜像可能需要的环境变量并渲染出 MYSQL_ROOT_PASSWORD 字段,这是一个很容易被忽视的“带智能化”的设计。
我在创建 MySQL 容器时通常会做三件事:
- 设置强密码并勾选记住环境变量;
- 在 Folders 区域把容器内 /var/lib/mysql 挂到宿主机 ~/Kitematic/mysql-data 目录;
- 设置宿主端口 3306,并固定使用 VM IP 连接。
对应命令行版本是:
docker run -d --name my-mysql \ -p 3306:3306 \ -v "$HOME/Kitematic/mysql-data":/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD='你的密码' \ mysql:8.0注意 Kitematic 的 Folders 挂载路径默认会写入 VirtualBox 的共享文件夹,宿主目录在 ~/Kitematic 下,容器内的数据实际写入 VM 磁盘,再通过共享目录映射回宿主机。这个链路容易让人误以为数据直接在宿主机,一旦 VirtualBox 的共享目录失效,数据恢复会很费劲。所以重要数据我还会额外用 mysqldump 做备份。
4.3 端口映射、网络与 VM IP
Kitematic 的容器详情页有 Ports 配置,能看到容器端口和宿主机端口的对应关系。我建议把宿主端口统一使用高位端口,比如 13306、18080,避免和本机已有进程冲突。当 GUI 提示 “port is already allocated”,不要杀别的进程,直接改端口重试:
# 查询 VM 当前 IP,用于访问容器服务 docker-machine ip default另一个常见问题:容器之间互相访问。VirtualBox VM 默认使用 host-only 网络,容器之间的网络桥接由 VM 内的 Docker bridge 承担。Kitematic 不提供可视化网络管理,容器互联需要通过共享 network 实现,这属于 CLI 能力,我在第 6 章会讲到怎么配合 GUI 使用。网络不同时最常见的现象是容器 A 用 localhost 访问容器 B,这是 Mac 宿主机视角,容器视角的 IP 要查容器的实际地址:
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' my-mysql4.4 日志、终端与文件查看
Kitematic 对每个容器提供三个快捷按钮:Logs 实时显示 stdout/stderr;Terminal 进入容器 shell;Files 浏览容器文件系统。Logs 里最值得关注的是 MySQL 首次启动日志,初始化时会在日志中打印 root 临时密码:
[Entrypoint] GENERATED ROOT PASSWORD: xxxxx如果你的 MYSQL_ROOT_PASSWORD 环境变量没有设置成功,这条日志是找回密码的唯一线索。Terminal 按钮等效于 docker exec -it <容器名> /bin/sh,Files 按钮则相当于把容器文件系统可视化出来,适合看 /etc/nginx/conf.d 这类配置文件。这三个入口排布在容器详情页顶部,是 Kitematic 相比命令行的优势:不用记 exec 参数,点按钮即可。
5. Kitematic 在 Mac 上的五个典型坑与排查路径
5.1 创建 VM 卡在 Downloading Docker ISO
现象:首次启动 Kitematic,界面长时间停在 Downloading Docker ISO,进度条不推进。
原因:boot2docker 镜像托管在 GitHub Release 上,公司网络或校园网拦截了该域名;也可能是 Kitematic 自动下载时链路中断,程序没有重试机制。
解决:手动下载 boot2docker ISO,用 VBoxManage 替换虚拟机的 ISO 光驱挂载,再重启 VM:
VBoxManage storageattach default \ --storagectl "SATA" \ --port 0 \ --device 0 \ --type dvddrive \ --medium "$HOME/Downloads/boot2docker.iso" docker-machine restart default docker-machine regenerate-certs default之后回到 Kitematic,它发现 VM 已存在,会直接进入连接阶段,不再尝试下载。
5.2 与 Docker Desktop 互相冲突
现象:安装了 Docker Desktop 的 Mac 上再打开 Kitematic,窗口一直转圈,或者出现 Error creating machine: exit status 1。
原因:Docker Desktop 使用的虚拟化框架和 VirtualBox 同时抢占硬件虚拟化资源,两个 hypervisor 不能同时正常运转。Kitematic 连接的是 VirtualBox 里的 VM,而 Docker Desktop 常驻后台,导致 VM 无法正常创建。
解决:两者二选一。用 Kitematic 时彻底退出 Docker Desktop,并确认后台进程已经结束:
# 查看 Docker Desktop 后台残留进程 ps aux | grep com.docker.backend # 彻底退出 Docker Desktop osascript -e 'quit app "Docker"'如果长期用 Kitematic,建议卸载 Docker Desktop;反之则移除 VirtualBox,避免冲突复发。
5.3 系统 Terminal 里 docker 命令找不到
现象:Kitematic 内能创建容器,但打开 macOS Terminal 执行 docker ps 提示 command not found。
原因:Kitematic 自带的 Docker CLI 路径只在它的 App 环境内有效,没有写入系统 PATH;也可能这台机器从未安装独立的 Docker CLI。
解决:把 Docker CLI 放进 /usr/local/bin:
# 找到 Kitematic 内置的 docker 客户端 find /Applications/Kitematic.app -name docker -type f # 复制到系统命令目录 sudo cp /Applications/Kitematic.app/Contents/Resources/docker /usr/local/bin/这里要提醒:Kitematic 内置 docker 客户端版本较旧,如果后续容器镜像用到比较新的 API 特性,建议从 Docker 官方获取较新 CLI 二进制替换。避免用旧客户端操作新 daemon 时出现低价 API 版本不兼容。
5.4 MySQL 容器被删后数据消失
现象:mysql:8.0 容器删除后重新创建,之前建立的库和表全没了。
原因:容器层是可写临时层,容器删除即销毁;没有把 /var/lib/mysql 挂载到宿主机目录。Kitematic 的 Folders 绑定只在创建容器时提供,创建完成后补绑卷比较麻烦,容易让人误以为容器天然持久化。
解决:如果容器还在运行,先停止并 commit 成新镜像,再用新镜像建立带卷容器:
docker stop my-mysql docker commit my-mysql my-mysql-bak:latest # 挂载卷后重建容器 docker run -d -p 3306:3306 \ -v "$HOME/Kitematic/mysql-data":/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=你的密码 \ my-mysql-bak:latest这份代码里的 commit 会把当前容量作为新镜像保存,但 volume 数据不在镜像层内,如果 commit 前 /var/lib/mysql 没挂宿主机,则 container 内的数据仍然可能在删除后丢失。最可靠的做法是从一开始就绑卷,而不是事后抢救。
5.5 镜像加速地址不生效
现象:在 Kitematic Preferences 中填了镜像加速地址,docker pull 依然从 Docker Hub 直接拉取,速度很慢。
原因:加速地址写入的是 VM 内 Docker daemon 的启动参数,但如果 boot2docker 的 init 脚本没有重读配置,daemon 不会自动加载新的 --registry-mirror。
解决:改完 Preferences 后,手动重启 VM 内 Docker 服务:
docker-machine ssh default "sudo /etc/init.d/docker restart"如果配置还是无效,检查 daemon 实际启动参数:
docker-machine ssh default "ps aux | grep dockerd"看到没有 --registry-mirror 参数时,就只能用命令把配置写到 boot2docker 的 profile 文件后重启虚拟机:docker-machine ssh default "echo 'EXTRA_ARGS="--registry-mirror=你的镜像加速地址"' | sudo tee -a /var/lib/boot2docker/profile",然后 docker-machine restart default。这类配置在 GUI 界面里显示为已写入,但底层生效与否完全取决于 daemon 是否重读配置,不能只看界面静态展示。
6. 进阶用法:让 Kitematic 的 VM 同时接受 CLI 与 Compose,再迁移到新工具
6.1 用 CLI 补足 GUI 的信息盲区
Kitematic 的图形界面能显示容器运行状态、日志和端口,但容器重启次数、健康检查状态、挂载详情、环境变量具体值这些信息,它在界面上不展示。我在日常调试时会让 Terminal 直接接管这个 VM:
# 让 shell 环境指向 Kitematic 管理的 default VM eval "$(docker-machine env default)" # 查看完整容器状态和重启次数 docker ps -a # 检查容器挂载与网络配置 docker inspect my-nginxeval 只需要一次,之后的 docker pull、docker run、docker logs 都会作用在 Kitematic 创建的 VirtualBox VM 上。GUI 用来看全局,CLI 用来钻细节,两者连的是同一个 daemon,不会出现“GUI 一个世界、CLI 另一个世界”的割裂。这个配合让我在这台老 Mac 上不再盲改参数、反复点重启,效率提升非常明显。
6.2 用 docker-compose 编排多容器,用 Kitematic 看状态
Kitematic 本身不支持 docker-compose 编排,但因为它连接的是标准 Docker daemon,CLI 能做的事它底层也能做。我处理多容器项目时会在项目目录放一个 docker-compose.yml:
version: "3" services: web: image: nginx:latest ports: - "8080:80" db: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: "example" volumes: - /Users/yourname/Kitematic/compose-mysql:/var/lib/mysql然后使用 docker-compose 启动:
docker-compose up -d这里有一个很值得注意的点:compose 文件里如果写相对路径./mysql-data,daemon 会把路径解析在 VM 内部,而 VM 中并不存在这个目录,最终导致挂载到空目录。用 Kitematic 承载 daemon 时,卷的绝对路径应该指向宿主机路径,并且保证该路径在 VM 启动前已经存在。这个“路径在宿主机还是在 VM 内”的区分,是很多人在 Mac 上第一次用 compose 时翻车的地方。
6.3 验证工具:一条命令判断 Docker 环境是否健康
无论用 Kitematic 还是 Docker Desktop,我都会在切换工具后先跑一段最小自检。保存为 docker-check.sh:
#!/bin/bash set -e docker info >/dev/null 2>&1 || { echo "docker daemon 未连接"; exit 1; } docker run --rm hello-world echo "容器启动成功"这段脚本验证两条链路:docker info 判断 daemon 是否可连接;hello-world 容器验证能够拉取镜像并成功创建运行容器。如果 Kitematic 在界面上表现异常,脚本能直接告诉你到底是 daemon 没起来,还是镜像拉取环节出问题,省去很多盲猜。
6.4 清理与维护:给 VM 留出呼吸空间
Kitematic 用久了,VirtualBox VM 的磁盘会越来越大,因为镜像、容器层、日志都堆积在 VM 内。我平时会做两层清理:
# 删除所有停止的容器和无主镜像,保留正在运行的 docker system prune -f # 查看 VM 磁盘占用 docker-machine ssh default "df -h /var/lib/docker"如果 df 显示磁盘使用率超过 80%,我会在 VirtualBox 里备份 VM 后重置磁盘。Kitematic 0.17.11 的 GUI 不提供镜像清理快捷键,但在它背后跑 CLI 完全可行。从那以后我每次切到一台新 Mac,都强制自己先把 docker-check.sh 放进项目根目录跑一遍,再决定用 GUI 还是直接上 CLI。图形界面再友好,也只负责“看着顺眼”,真正判断环境健康的还得是这条从 docker info 到 hello-world 的链路。这套“GUI 观察 + CLI 验证 + 脚本兜底”的习惯帮我少踩了很多环境类的玄学坑,希望帮到你。
本文还有配套的精品资源,点击获取