go-dockerclient的UploadToContaine

2020-12-06  本文已影响0人  CodingCode

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这样封装就可以了呢。反正这样能用。

上一篇下一篇

猜你喜欢

热点阅读