This commit is contained in:
zw@118
2026-08-25 22:33:33 +08:00
parent 0a0e5fdf7f
commit 5e650491a2
4 changed files with 180 additions and 2 deletions

View File

@@ -63,6 +63,43 @@ echo OK`
}
}
// ============================
// Docker 容器化压测支持
// ============================
// DockerInfo 远程 Docker 环境信息
type DockerInfo struct {
Available bool // Docker 是否可用(已安装且有权限)
Image string // 镜像名(检测时传入,确认存在时回填)
HasImage bool // 目标镜像是否已存在本地(避免每次 pull
}
// DetectDocker 检测远程主机的 Docker 环境。
// 包括docker 命令是否存在、是否需要 sudo、镜像是否已存在。
// sudoPwd 为非 root 用户执行时的密码(用于 sudo docker
func DetectDocker(client *ssh.Client, image string, sudoPwd string) DockerInfo {
info := DockerInfo{Image: image}
// 1. 检测 docker 命令是否存在(支持 root 和 sudo
if out, err := runPrivileged(client, "command -v docker", sudoPwd); err != nil || strings.TrimSpace(out) == "" {
return info
}
info.Available = true
// 2. 检测 docker 服务是否运行docker info 成功即可)
if _, err := runPrivileged(client, "docker info >/dev/null 2>&1", sudoPwd); err != nil {
info.Available = false
return info
}
// 3. 检测目标镜像是否已存在本地(避免每次拉取)
if out, err := runPrivileged(client, fmt.Sprintf("docker image inspect %s >/dev/null 2>&1 && echo EXIST", image), sudoPwd); err == nil && strings.Contains(out, "EXIST") {
info.HasImage = true
}
return info
}
// ============================
// 远程工具检测
// ============================