API док-станции Golang: невозможно запустить Exec для контейнера - PullRequest
0 голосов
/ 18 февраля 2019

Я пытаюсь запустить Exec Command в Docker-контейнере, созданном с помощью клиента Go для API Docker Engine.

Вот мой код.

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.такая же ошибка будет и там.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...