您可以使用 Docker SDK 中的 ExecStart 方法来获取容器中命令行运行后的结果。ExecStart 方法会启动一个 exec 任务,并返回一个 Reader 接口,您可以从 Reader 中读取命令行的输出。

例如:

resp, err := cli.ContainerExecCreate(ctx, containerID, types.ExecConfig{
    AttachStdout: true,
    AttachStderr: true,
    Cmd:          []string{"ls", "-l"},
})
if err != nil {
    panic(err)
}

execID := resp.ID
resp, err = cli.ContainerExecAttach(ctx, execID, types.ExecStartCheck{})
if err != nil {
    panic(err)
}

defer resp.Close()

output, err := ioutil.ReadAll(resp.Reader)
if err != nil {
    panic(err)
}

fmt.Println(string(output))

另外,重复调用 ContainerAttach 方法会导致之前的 exec 任务仍然存在,可以使用 ContainerExecKill 方法来杀死之前的 exec 任务。

例如:

err = cli.ContainerExecKill(ctx, execID, "SIGKILL")
if err != nil {
    panic(err)
}

最后,Docker SDK 的使用确实有一定的复杂度,可以参考官方文档和示例代码来学习。

Golang Docker SDK: 获取容器命令执行结果 & 解决重复调用 ContainerAttach 报错

原文地址: https://www.cveoy.top/t/topic/kZtQ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录