Как печатать команды `bash -xc` при использовании Docker Go SDK?

#bash #docker #go #docker-api

#bash #docker #Вперед #docker-api

Вопрос:

Я пытаюсь печатать сами команды Bash изнутри Docker с помощью Go SDK. Работает следующее:

 docker run ubuntu /bin/bash -xc "echo test
echo hello
"
  

и выводит следующие результаты:

   echo test
test
  echo hello
hello
  

Однако при выполнении той же операции в приложении Go с использованием Docker SDK я получаю результаты команд, но не сами команды (это пример Docker SDK по умолчанию, измененный для использования многострочных команд):

 package main

import (
    "context"
    "io"
    "os"
    "log"
    "github.com/docker/docker/api/types"
    "github.com/docker/docker/api/types/container"
    "github.com/docker/docker/client"
    "github.com/docker/docker/pkg/stdcopy"
)

func main() {
    ctx := context.Background()
    cli, err := client.NewClientWithOpts(client.FromEnv, client.WithAPIVersionNegotiation())

    if err != nil {
        panic(err)
    }

    script := `
        echo hello
        echo test
    `

    reader, err := cli.ImagePull(ctx, "docker.io/library/ubuntu", types.ImagePullOptions{})
    if err != nil {
        panic(err)
    }
    io.Copy(os.Stdout, reader)
        
    resp, err := cli.ContainerCreate(ctx, amp;container.Config{
        Image: "ubuntu",
        Cmd:   []string{"/bin/bash", "-c", script},
    }, nil, nil, nil, "")
    if err != nil {
        panic(err)
    }

    if err := cli.ContainerStart(ctx, resp.ID, types.ContainerStartOptions{}); err != nil {
        panic(err)
    }
    
    statusCh, errCh := cli.ContainerWait(ctx, resp.ID, container.WaitConditionNotRunning)
    select {
    case err := <-errCh:
        if err != nil {
            panic(err)
        }
    case <-statusCh:
    }
    
    out, err := cli.ContainerLogs(ctx, resp.ID, types.ContainerLogsOptions{ShowStdout: true})
    if err != nil {
        panic(err)
    }

    stdcopy.StdCopy(os.Stdout, os.Stderr, out)
}
  

Возможно ли получить эти значения из журналов Docker?

Комментарии:

1. Находятся ли они в stderr контейнера?

2. Не знал, что set x это записывается в stderr. Спасибо за помощь!