ContainerAttach方法返回的是容器的标准输出和标准错误流,而不是命令行运行后的结果。因此,读取这些流只能得到容器运行时的输出信息,而不能得到命令行运行后的结果。

要获取命令行运行后的结果,可以使用Exec方法来在容器内部执行命令。Exec方法会返回一个执行结果对象,通过这个对象可以获得命令的输出信息、退出码等结果。

示例代码:

// 创建一个Exec请求
cmd := []string{"ls", "-l"}
execConfig := types.ExecConfig{
    AttachStdout: true,
    AttachStderr: true,
    Cmd:          cmd,
}
execID, err := cli.ContainerExecCreate(ctx, containerID, execConfig)
if err != nil {
    log.Fatal(err)
}

// 执行命令
resp, err := cli.ContainerExecAttach(ctx, execID.ID, types.ExecStartCheck{})
if err != nil {
    log.Fatal(err)
}
defer resp.Close()

// 读取命令输出
output, err := ioutil.ReadAll(resp.Reader)
if err != nil {
    log.Fatal(err)
}

// 获取命令退出码
inspect, err := cli.ContainerExecInspect(ctx, execID.ID)
if err != nil {
    log.Fatal(err)
}
exitCode := inspect.ExitCode
``
docker sdk中的ContainerAttach方法中通过Read方法得到的不是命令行运行后的结果而是上一个输入的命令行这是为什么那如何才能获取命令行运行后的结果

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

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