【问题标题】:Docker Golang API create a container with files from memoryDocker Golang API 使用内存中的文件创建一个容器
【发布时间】:2017-04-12 18:10:43
【问题描述】:

目前,要使用 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】:

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

    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{})
    

    【讨论】:

    • 能否提供content变量的定义?它是什么类型的?
    • 一个简单的字符串
    猜你喜欢
    • 2019-05-18
    • 1970-01-01
    • 2022-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多