feat: 将更多 Docker 命令改为内置实现,统一按名称/ID 解析目标

- exec/rm/rmi/stop/restart 支持名称、ID 或唯一 ID 前缀,目标不存在或
  前缀有歧义时在调用 docker 前报错;exec 默认 -it 并以 -- 分隔命令
- logs 新增 --since/--grep/--save;df 改为按占用排序的可读排行;
  stats 默认单次快照,无参数时统计全部运行中容器
- 破坏性确认:Command.ConfirmBuiltin 提供将删除对象的清单,
  rm/rmi 无 --yes 时列清单并退出码 2,拒绝 -f,运行中容器提示先 stop
- 抽出 executor/dockertargets.go 统一镜像/容器解析与 docker 调用
This commit is contained in:
2026-11-01 08:01:12 +08:00
parent bd6f20d7c5
commit f5ae80c1a8
18 changed files with 2308 additions and 226 deletions
+13 -2
View File
@@ -213,6 +213,9 @@ func TestDockerCommandsWellFormed(t *testing.T) {
destructive := map[string]bool{
"docker.clearall": true,
"docker.prunevolumes": true,
// rm/rmi now list their targets and require an explicit --yes.
"docker.rm": true,
"docker.rmi": true,
}
needsArgs := map[string]int{
"docker.logs": 1,
@@ -231,8 +234,16 @@ func TestDockerCommandsWellFormed(t *testing.T) {
}
// Built from kopsc's own implementation rather than a fixed argv.
builtin := map[string]string{
"docker.save": "docker.save",
"docker.load": "docker.load",
"docker.df": "docker.df",
"docker.exec": "docker.exec",
"docker.logs": "docker.logs",
"docker.stats": "docker.stats",
"docker.load": "docker.load",
"docker.restart": "docker.restart",
"docker.rm": "docker.rm",
"docker.rmi": "docker.rmi",
"docker.save": "docker.save",
"docker.stop": "docker.stop",
}
for i := range reg.Commands {