Docker 卷插件

Docker Engine 卷插件使 Engine 部署能够与 外部存储系统(如 Amazon EBS),并支持数据卷持久保存 超过单个 Docker 主机的生命周期。有关更多信息,请参阅插件文档

更改日志

1.13.0

  • 如果用作 v2 插件体系结构的一部分,则作为 插件返回的 paths 必须挂载在插件配置中指定的目录下 ( #26398PropagatedMount)

1.12.0

  • 将字段添加到响应 ( #21006StatusVolumeDriver.Get)
  • 添加以获取卷驱动程序的功能 ( #22077VolumeDriver.Capabilities)

1.10.0

  • Add 获取有关卷的详细信息 ( #16534VolumeDriver.Get)
  • Add 列出驱动程序拥有的所有卷 ( #16534VolumeDriver.List)

1.8.0

  • 对卷驱动程序插件的初步支持 ( #14659)

命令行更改

要为容器提供对卷的访问权限,请在命令中使用 and 标志。(或 ) 标志 接受主机上的卷名称和路径,以及标志 接受驱动程序类型。--volume--volume-driverdocker container run--volume-v--volume-driver

$ docker volume create --driver=flocker volumename

$ docker container run -it --volume volumename:/data busybox sh

--volume

(or ) 标志采用格式为 .该值的两个部分是 用冒号 () 字符分隔。--volume-v<volume_name>:<mountpoint>:

  • 卷名称是卷的可读名称,不能以 一个角色。它与本主题的其余部分相同。/volume_name
  • 是主机 (v1) 或插件 (v2) 中的路径,其中 卷 已可用。Mountpoint

volumedriver

将 a 与 a 结合使用,您可以 使用 Flocker 等插件进行管理 单个主机外部的卷,例如 EBS 上的卷。volumedrivervolumename

创建 VolumeDriver

容器创建端点 () 接受允许指定驱动程序名称的字段类型。如果不是 指定,则默认为 (本地卷的默认驱动程序)。/containers/createVolumeDriverstring"local"

卷插件协议

如果插件在激活时将自身注册为 ,则它必须 为 Docker 守护程序提供主机文件系统上的可写路径。The Docker daemon 为容器提供这些路径以供使用。Docker 守护进程使 通过将提供的路径绑定挂载到容器中来可用的卷。VolumeDriver

注意

卷插件不应将数据写入目录, 包括。目录为 为 Docker 保留。/var/lib/docker//var/lib/docker/volumes/var/lib/docker/

/VolumeDriver.Create

请求:

{
    "Name": "volume_name",
    "Opts": {}
}

指示插件用户要创建卷(给定用户) 指定的卷名称。该插件不需要实际显示 volume 尚未在文件系统上(直到被调用)。 是从用户请求传递的驱动程序特定选项的映射。MountOpts

响应:

{
    "Err": ""
}

如果发生错误,则使用字符串错误进行响应。

/VolumeDriver.Remove

请求:

{
    "Name": "volume_name"
}

从磁盘中删除指定的卷。当用户 调用以删除与容器关联的卷。docker rm -v

响应:

{
    "Err": ""
}

如果发生错误,则使用字符串错误进行响应。

/VolumeDriver.Mount

请求:

{
    "Name": "volume_name",
    "ID": "b87d7442095999a92b65b3d9691e697b61713829cc0ffd1bb72e4ccd51aa4d6c"
}

Docker 要求插件在给定用户指定卷的情况下提供卷 名字。 在每个容器启动时调用一次。如果要求相同 不止一次,插件可能需要跟踪每个新的挂载请求和配置 在第一个 mount 请求时取消配置,并在最后一个相应的卸载请求中取消配置。Mountvolume_name

ID是请求挂载的调用方的唯一 ID。

响应:

  • 第 1 版

    {
        "Mountpoint": "/path/to/directory/on/host",
        "Err": ""
    }
  • 第 2 版

    {
        "Mountpoint": "/path/under/PropagatedMount",
        "Err": ""
    }

Mountpoint是主机 (v1) 或插件 (v2) 上的路径,其中卷 已推出。

Err为空或包含错误字符串。

/VolumeDriver.Path

请求:

{
    "Name": "volume_name"
}

请求具有给定 .volume_name

响应:

  • 第 1 版

    {
        "Mountpoint": "/path/to/directory/on/host",
        "Err": ""
    }
  • 第 2 版

    {
        "Mountpoint": "/path/under/PropagatedMount",
        "Err": ""
    }

使用主机上 (v1) 或插件 (v2) 内的路径进行响应,其中 volume has been available 和/或 String Error (如果发生错误)。

Mountpoint是可选的。但是,如果出现 未提供。

/VolumeDriver.Unmount

请求:

{
    "Name": "volume_name",
    "ID": "b87d7442095999a92b65b3d9691e697b61713829cc0ffd1bb72e4ccd51aa4d6c"
}

Docker 不再使用命名卷。 每 容器停止。插件可能会推断出在 这一点。Unmount

ID是请求挂载的调用方的唯一 ID。

响应:

{
    "Err": ""
}

如果发生错误,则使用字符串错误进行响应。

/VolumeDriver.Get

请求:

{
    "Name": "volume_name"
}

获取有关 的信息。volume_name

响应:

  • 第 1 版

    {
      "Volume": {
        "Name": "volume_name",
        "Mountpoint": "/path/to/directory/on/host",
        "Status": {}
      },
      "Err": ""
    }
  • 第 2 版

    {
      "Volume": {
        "Name": "volume_name",
        "Mountpoint": "/path/under/PropagatedMount",
        "Status": {}
      },
      "Err": ""
    }

如果发生错误,则使用字符串错误进行响应。 并且是 自选。MountpointStatus

/VolumeDriver.List

请求:

{}

获取使用插件注册的卷列表。

响应:

  • 第 1 版

    {
      "Volumes": [
        {
          "Name": "volume_name",
          "Mountpoint": "/path/to/directory/on/host"
        }
      ],
      "Err": ""
    }
  • 第 2 版

    {
      "Volumes": [
        {
          "Name": "volume_name",
          "Mountpoint": "/path/under/PropagatedMount"
        }
      ],
      "Err": ""
    }

如果发生错误,则使用字符串错误进行响应。 是可选的。Mountpoint

/VolumeDriver.Capabilities

请求:

{}

获取驱动程序支持的功能列表。

驱动程序不需要实现 .如果不是 implemented 时,将使用默认值。Capabilities

响应:

{
  "Capabilities": {
    "Scope": "global"
  }
}

支持的范围包括 和 。中的任何其他值都将是 ignored 和 used。 允许集群管理器处理 音量。例如,范围 , 向 Cluster Manager 中,它只需要创建一次卷,而不是在每个卷上 Docker 主机。将来可能会添加更多功能。globallocalScopelocalScopeglobal