Docker Golang API使用内存中的文件创建容器

问题描述 投票:4回答:1

目前,要使用golang api将文件放入容器中,首先必须创建容器,然后使用CopyToContainer函数(下面的示例)。

是否可以创建一个容器并指定它在创建时具有的文件,而不必先将文件放在文件系统上?

例1)

func main() {
    cli, err := client.NewEnvClient()
    if err != nil {
        panic(err)
    }

    resp, err := cli.ContainerCreate(context.Background(),
        &container.Config{
            Image: "alpine",
            Cmd:   []string{"ls", "/"},
        }, nil, nil, "testContainer")
    if err != nil {
        panic(err)
    }

    fmt.Printf("Created: %v\n", resp.ID)

    cli.CopyToContainer(context.Background(), resp.ID, "/", getTar(),types.CopyToContainerOptions{})
}

func getTar() io.Reader {
    ...
}

编辑: - 代码间距。

docker go docker-api
1个回答
0
投票

我找到了这个解决方案,但我无法将文件显示在容器中。尝试一下,让我知道它是否适合你!

var buf bytes.Buffer
tw := tar.NewWriter(&buf)
err = tw.WriteHeader(&tar.Header{
    Name: filename,            // filename
    Mode: 0777,                // permissions
    Size: int64(len(content)), // filesize
})
if err != nil {
    return nil, fmt.Errorf("docker copy: %v", err)
}
tw.Write([]byte(content))
tw.Close()

// use &buf as argument for content in CopyToContainer
cli.CopyToContainer(context.Background(), resp.ID, "/", &buf,types.CopyToContainerOptions{})
© www.soinside.com 2019 - 2024. All rights reserved.