我试图在通过Go客户端为Docker Engine API创建的Docker容器上运行Exec Command。
这是我的代码。
func main() {
ctx := context.Background()
cli, err := client.NewEnvClient()
if err != nil {
panic(err)
}
reader, err := cli.ImagePull(ctx, "docker.io/library/centos:7", types.ImagePullOptions{})
if err != nil {
panic(err)
}
io.Copy(os.Stdout, reader)
resp, err := cli.ContainerCreate(ctx, &container.Config{
Image: "centos",
//Cmd: []string{"cat", "/etc/hosts"},
//Tty: true,
}, nil, nil, "")
if err != nil {
panic(err)
}
if err := cli.ContainerStart(ctx, resp.ID,
types.ContainerStartOptions{}); err != nil {
panic(err)
}
time.Sleep(5 * time.Second)
c := types.ExecConfig{AttachStdout: true, AttachStderr: true,
Cmd: []string{"echo", "Hello Himanshu"}}
execID, _ := cli.ContainerExecCreate(ctx, resp.ID, c)
fmt.Println(execID)
config := types.ExecConfig{}
res, er := cli.ContainerExecAttach(ctx, execID.ID, config)
if er != nil {
fmt.Println("Some Error")
}
err = cli.ContainerExecStart(ctx,execID.ID,types.ExecStartCheck{})
if err != nil {
fmt.Println("Kuchh error")
}
content, _, _ := res.Reader.ReadLine()
fmt.Println(string(content))
}
在这里我总是出错:
无法在停止状态下执行:未知 或
无法升级到TCP,收到404
即使我使用容器日志,它也将打印RUN cmd中提供的内容,而不打印Exec中发送的内容。同样的错误也会在那里。