docker init / debug / scout:3 条塞进 CLI 的子命令,各自解决什么问题
Docker 把几件原本靠额外工具或脚本完成的事做成了 docker 的子命令,随 Docker Desktop 提供。信源是 Docker 官方 CLI 文档(docs.docker.com)。这里把 docker init、docker debug、docker scout 的用法、机制和实际会踩的坑过一遍。
docker init:在项目目录里生成容器化起步文件
docker init [OPTIONS]
唯一选项是 --version,显示 init 插件版本。
在项目目录里以交互问答方式生成下面这些文件,默认值都给好了:
.dockerignoreDockerfilecompose.yamlREADME.Docker.md
文件已存在时会警告并询问是否覆盖全部;如果已存在的是 docker-compose.yaml 而不是 compose.yaml,可以用 docker-compose.yaml 这个文件名覆盖。覆盖后的文件不可恢复,要留底就先改名或复制一份。
可选模板:
| 模板 | 备注 |
|---|---|
| ASP.NET Core | |
| Go | 会问 Go 版本、main 包的相对目录、服务监听端口 |
| Java (Maven) | 打成 uber jar |
| Node | 会问 Node 版本、包管理器(yarn/npm)、启动前是否跑 build、build 输出目录、启动命令、端口 |
| PHP with Apache | 适合纯 PHP 与 Composer 项目,生成后需手动在 Dockerfile 里补所需 PHP 扩展 |
| Python | |
| Rust | |
| Other | 通用起点 |
会自动检测平台,比如 PHP 项目在列表里显示 (detected)。生成完成后提示用 docker compose up --build 启动。
docker debug:slim 容器没有 shell 也能进去
debug [OPTIONS] {CONTAINER|IMAGE}
docker exec -it my-app bash 在 slim 容器里会直接失败——没有 shell,常用工具也被删干净了。docker debug 在这种情况下仍然可用,且不需要修改镜像,也不会修改镜像。
机制上它自带一个 toolbox,预装 vim、nano、htop、curl 等;要追加工具用内置的 install,包来自 https://search.nixos.org/packages 。shell 支持 bash / fish / zsh,默认自动检测。
内置工具:
| 命令 | 作用 |
|---|---|
install [tool...] | 从 Nix 包源安装 |
uninstall [tool...] | 卸载 |
entrypoint | 打印 / 检查(lint)/ 运行镜像的 ENTRYPOINT 与 CMD 组合结果,可配 --print、--run |
builtins | 显示自定义内置工具 |
边界要分清楚:
- 对镜像和已停止容器,退出 shell 后所有改动全部丢弃,任何时刻都不会影响真实的镜像/容器。
- 对运行中或已暂停的容器,文件系统改动对容器直接可见。
/nix目录对真实镜像/容器永远不可见。
选项:
| 选项 | 说明 |
|---|---|
--shell | auto/bash/fish/zsh,默认 auto |
-c, --command | 直接执行命令而非进入交互,类似 bash -c,适合脚本化 |
--host | 连接指定 docker socket,如 ssh://root@example.org、unix:///some/path/docker.sock,可远程调试 |
几个例子:
docker debug my-app
docker debug hello-world # 不需要先 pull
docker debug nginx # 进去后 install nmap
docker debug --command "cat /usr/share/nginx/html/index.html" nginx
docker debug nginx 里 install nmap 装上的工具,换到其它镜像仍然保留。
docker scout:镜像的漏洞、SBOM 与仓库监视
docker scout [command]
子命令(部分):
| 子命令 | 用途 |
|---|---|
attestation | 管理镜像背书 |
cache | 管理缓存与临时文件 |
compare | 对比两个镜像差异(实验) |
config | 配置 |
cves | 显示制品里的 CVE |
enroll | 组织接入 |
environment | 实验 |
integration | 列出/配置/删除集成 |
policy | 对镜像评估本地 Rego 策略(实验) |
push | 把镜像/image index 推到 Scout |
quickview | 镜像快速概览 |
recommendations | 基础镜像更新与修复建议 |
repo | 仓库级开关 |
sbom | 生成/展示镜像 SBOM |
stream | 实验 |
version | 版本 |
vex | 管理 VEX 背书 |
watch | 监视 registry 仓库并推送到 Scout |
日常最常用的四个:quickview 看镜像概览,cves 列漏洞,sbom 出软件物料清单,watch 盯住 registry 仓库。
为什么这三条值得放进日常流程
docker init 把脚手架生成拉进 CLI,docker debug 解决了 slim 容器没法 exec bash 的老问题,docker scout 把漏洞扫描和 SBOM 从外围脚本变成了子命令。init 与 debug 由 Docker Desktop 提供,不是纯 CLI 插件,环境里装没装 Desktop 会直接影响能不能用。
官方文档
- docker init:https://docs.docker.com/reference/cli/docker/init/
- docker debug:https://docs.docker.com/reference/cli/docker/debug/
- docker scout:https://docs.docker.com/reference/cli/docker/scout/