feat: 新增 proc nohup 后台运行、docker save/load 内置实现,移除 Podman 支持

- proc.nohup:后台运行命令并将 stdout/stderr 追加写入日志,
  Unix 下新会话、Windows 下 DETACHED_PROCESS 脱离终端
- docker.save:等价 docker save <镜像> -o <镜像名>.tar,文件名按
  仓库名+标签生成(alpine:3.20 → alpine_3.20.tar),传镜像 ID 时
  先解析出对应名称;docker.load 改为归档文件作位置参数
- 移除 Podman 支持,所有容器命令只走 docker
This commit is contained in:
2026-11-01 07:47:57 +08:00
parent 6002a3afd1
commit bd6f20d7c5
19 changed files with 1551 additions and 120 deletions
+6 -8
View File
@@ -53,7 +53,7 @@ func (s *Service) Run(ctx context.Context, args []string) error {
type source struct {
kind string // "docker" or "k8s"
program string // docker or podman
program string // docker
namespace string
context string
}
@@ -128,17 +128,15 @@ func (s *Service) resolve(ctx context.Context, target string, opts Options) (sou
}
func (s *Service) dockerProgram() (string, error) {
for _, name := range []string{"docker", "podman"} {
if _, err := s.runner.LookPath(name); err == nil {
return name, nil
}
if _, err := s.runner.LookPath("docker"); err == nil {
return "docker", nil
}
for _, name := range s.info.Runtimes {
if name == "docker" || name == "podman" {
return name, nil
if name == "docker" {
return "docker", nil
}
}
return "", fmt.Errorf("未找到 docker 或 podman")
return "", fmt.Errorf("未找到 docker")
}
// run executes a command with a per-command timeout.