在GoLang Docker SDK中定义卷的安装点

Dra*_*117 3 go docker

我目前正在尝试使用官方GoLang Docker SDK创建一个Docker容器,并尝试将一个卷从我的本地主机挂载到Docker容器。

vol := map[string]struct{}{"/pathInDocker":{}}

// This was prepared using example at:
//https://docs.docker.com/develop/sdk/examples/#run-a-container
res, err := cli.ContainerCreate(ctx, &container.Config{
    Image: testImageName,
    Volumes: vol,
    Cmd: []string{"ls", "/"},
}, nil, nil, "")
Run Code Online (Sandbox Code Playgroud)

这可以在创建容器并将“ / pathInDocker”添加到docker容器时起作用,但是,我无法弄清楚如何为本地主机添加安装点。

我已经尝试了以下vol变量的可能值

vol := map[string]struct{}{"localPath:/pathInDocker":{}}
vol := map[string]struct{}{"\"localPath\":\"/pathInDocker\"":{}}
Run Code Online (Sandbox Code Playgroud)

对于每个这些,最终的docker容器都会尝试将map密钥作为docker中的文件夹安装,而没有localhost的安装点。

我已经仔细阅读了文档,似乎似乎只能找到关于如何配置卷的唯一内容:

Volumes         map[string]struct{} // List of volumes (mounts) used for the container
Run Code Online (Sandbox Code Playgroud)

所以我的问题是如何配置它,以便将本地文件夹安装到该卷?

aer*_*ite 7

如果要使用绑定安装,则需要在HostConfig中提供安装信息。

res, err := client.ContainerCreate(
    ctx,
    &container.Config{
        Image: "nginx",
        Cmd:   []string{"ls", "/"},
    },
    &container.HostConfig{
        Mounts: []mount.Mount{
            {
                Type:   mount.TypeBind,
                Source: "/localPath",
                Target: "/pathInDocker",
            },
        },
    },
    nil,
    "",
)
Run Code Online (Sandbox Code Playgroud)

而且,如果要使用卷,则首先需要创建具有装载路径的卷,然后需要将此卷名称用作“源”。

  • 我可以通过首先使用`VolumeCreate`创建一个docker卷来安装它,然后像@aerokite一样在mount数组中使用我的卷的名称:`myMount:= mount.Mount {Type:volume.TypeVolume来源:myVolume .Name目标:“ / var / lib / postgresql / data”}` (2认同)