Golang Docker SDK: 获取容器命令执行结果 & 解决重复调用 ContainerAttach 报错
您可以使用 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 的使用确实有一定的复杂度,可以参考官方文档和示例代码来学习。
原文地址: https://www.cveoy.top/t/topic/kZtQ 著作权归作者所有。请勿转载和采集!