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