在使用go操作docker读取容器的输出时, 每一行的开头会有乱码, 最开始怀疑是容器的字符集问题, 但是把容器的字符集调整为utf8也会有这个问题

解决的办法
func printContainerLogs(containerID string) (string, error) { out, err := global.DockerCli.ContainerLogs(global.Ctx, containerID, types.ContainerLogsOptions{ShowStdout: true, ShowStderr: true}) if err != nil { return "", fmt.Errorf("读取容器日志失败:%v", err) } defer func(out io.ReadCloser) { err := out.Close() if err != nil { global.Logger.Errorf("关闭容器%s的out失败", containerID) } }(out) //重点在这里, 需要用stdcopy方法把ContainerLogs方法返回reader复制到我们新的buffer上, 然后读取buf的输出 var buf bytes.Buffer if _, err = stdcopy.StdCopy(&buf, &buf, out); err != nil { global.Logger.Errorf("读取容器的输出为utf8失败:%v", err) return "", err } logs := buf.String() return logs, nil }
发表回复