douqiu0796
2018-04-06 09:46
浏览 263

Golang Docker API-尾容器日志

I'm using Go and hitting Docker's API to pull an image, and then create and execute a container. Specifically I'm using the docker-newman image. I can see that it's actually being executed in Kitematic, so I know that everything is setup correctly. However, my Go application isn't attaching and then tailing the logs being output.

I've seen this answer, and it references what appears to be the way to attach to the image and view the log. I can't seem to get it to work regardless of what I try.

attachToContainerOptions := docker.AttachToContainerOptions{
    Container: container.ID,
    OutputStream: os.Stdout,
    ErrorStream:  os.Stderr,
    Logs: true,
    Stdout: true,
    Stderr: true,
}
if err := client.AttachToContainer(attachToContainerOptions); err != nil {
    panic(err)
} 

No error occurs, but this immediatley gets passed over without streaming anything to the console. How do I get this to stream to the console until the docker cmd completes?

图片转代码服务由CSDN问答提供 功能建议

我正在使用Go并点击Docker的API提取图像,然后创建并执行一个容器。 具体来说,我使用的是 docker-newman 图片。 我可以看到它实际上是在Kitematic中执行的,所以我知道一切都已正确设置。 但是,我的Go应用程序未附加,然后拖出正在输出的日志。

我已经看到这个答案,它引用的似乎是附加到图像并查看日志的方式。 无论尝试什么,我似乎都无法正常工作。

  attachToContainerOptions:= docker.AttachToContainerOptions {
 Container:container.ID,
 OutputStream:os  .stdout,
 ErrorStream:os.Stderr,
日志:true,
 Stdout:true,
 Stderr:true,
} 
if err:= client.AttachToContainer(attachToContainerOptions);  err!= nil {
 panic(err)
} 
   
 
 

没有错误发生,但是此即时消息被传递而没有向控制台流式传输任何内容。 如何将其流式传输到控制台,直到docker cmd完成?

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • douzi8112 2018-04-06 17:38
    已采纳

    Attach only works on a running container and the container lifetime for that image is ephemeral. Try *Client.Logs, instead, to get the resulting logs.

    Here is a code sample:

    logsOptions := docker.LogsOptions{
        Container:    container.ID,
        OutputStream: os.Stdout,
        ErrorStream:  os.Stderr,
        Follow:       true,
        Stdout:       true,
        Stderr:       true,
    }
    if err := client.Logs(logsOptions); err != nil {
        panic(err)
    }
    
    已采纳该答案
    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题