go - 在 docker exec 响应开始时解释并删除无用的字节

标签 go

我正在运行 docker api 函数:

func (cli *Client) ContainerExecAttach(ctx context.Context, execID string, config types.ExecConfig) (types.HijackedResponse, error)

当我使用内置的 bufio 阅读器读取响应时:

line, _, err := resp.Reader.ReadLine()

我没有收到任何错误,但如果我尝试将字节转换为字符串,应用程序就会崩溃 - 有问题的应用程序是一个 Windows 服务,我认为正因为如此,我正在努力从中找出错误。

我现在已经设法使用(记录到事件查看器)查看输出:

logger.Infof("res: %q", line)

输出结果是:

res: "\x01\x00\x00\x00\x00\x00\x00X{\"updating\":false,\"scanning\":false,\"progress\":0,\"discovering\":false,\"registered\":false}"

现在,我期待 json,但 funky 前缀是最不受欢迎的,知道这些字节是什么以及它们为什么存在吗?我希望这会告诉我的下一个问题;删除它们或首先不接收它们的最干净的方法是什么?

我目前正在按固定长度修剪字节,但我认为我需要做一些更复杂的事情。我正在考虑向左修剪这些字节:\x01 \x00 但不确定我是否应该期待任何其他字节

最佳答案

您返回的 HTTP 响应是记录在案的 Docker 流格式 here .

您应该考虑使用 github.com/docker/docker/pkg/stdcopy.StdCopy将流多路分解为 stdout/stderr 的函数。

关于go - 在 docker exec 响应开始时解释并删除无用的字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46478169/

相关文章:

mongodb - 基于 GO 的 Mongo 聚合查询问题

go - 如何为[]byte的json.Marshal获取空列表[]而不是null?

go - RLock已评估,但未使用!为什么会出现这样的错误?

ruby-on-rails - Ruby 的 grpc(v1.3.2) gem SSL/TLS 连接问题与完全在 golang 中构建的 grpc 服务器

amazon-web-services - 我正在运行一个 REST API 服务器,但我不太了解基础架构。另外,我可以做些什么来进行基准测试和提高速度?

amazon-web-services - 用 Go 插入 firehose

go - 将多值分配给结构文字

go - 如何在实时输出的同时将命令的标准输出和标准错误重定向到控制台和日志文件?

列出包 `MoveToFront` 不适合我

go - 简单的golang程序无法运行