美文网首页
go-dockerclient的UploadToContaine

go-dockerclient的UploadToContaine

作者: CodingCode | 来源:发表于2020-12-06 07:30 被阅读0次

fsouza/go-dockerclient的UploadToContainer如何上传一个tar文件。

这个API踩了很多坑,怎么也上传不上去;最后从这里看到的解决方案。
https://stackoverflow.com/questions/35962443/go-dockerclient-uploadtocontainer-tar-examples

下面给出一个完整的代码例子:

    // fileBody is the single raw file sample.txt content

    var buf bytes.Buffer
    tw := tar.NewWriter(&buf)
    hdr := &tar.Header{
            Name: "sample.txt",
            Mode: 0644,
            Size: int64(len(fileBody)),
    }
    err = tw.WriteHeader(hdr)
    if err != nil {
        return fmt.Errorf("Error writing entrypoint header: %s", err)
    }
    _, err = tw.Write([]byte(entrypointBody))
    if err != nil {
        return fmt.Errorf("Error writing entrypoint body: %s", err)
    }
    err = tw.Close()
    if err != nil {
        return fmt.Errorf("Error closing entrypoint: %s", err)
    }


    type sT struct {
        *bytes.Buffer
    }
    in := sT{bytes.NewBufferString(string(buf.Bytes()))}
    err = client.UploadToContainer(container.ID, docker.UploadToContainerOptions{
        Path:        "/tmp/input",
        InputStream   : in,
    })
    if err != nil {
        return fmt.Errorf("Error uploading input to container: %s", err)
    }

这样sample.txt会被上传到/tmp/input目录下面;注意/tmp/input目录必须已经存在。

问题主要出在UploadToContainerOptions的参数InputStream部分,怎么也调试不对,但现在还是不明白为什么加了个sT这样封装就可以了呢。反正这样能用。

相关文章

网友评论

      本文标题:go-dockerclient的UploadToContaine

      本文链接:https://www.haomeiwen.com/subject/btznwktx.html