如何安装docker的btrfs卷插件?

时间:2016-08-15 13:04:48

标签: docker docker-volume

运行命令时:

docker run -it -v some_volume:/abc/xyz --volume-driver=btrfs a_docker_image /bin/bash

终端显示:

docker: Error response from daemon: create some_volume: Error looking up volume plugin btrfs: plugin not found.

====================

但如果首先创建卷:

docker volume create --opt type=btrfs --name some_volume

它将成功创建卷。现在,如果我尝试运行容器并创建一个新卷:

docker run -it -v some_volume:/abc/xyz --volume-driver=btrfs a_docker_image /bin/bash

它显示(当然有意义,因为已经创建了相同的名称卷):

docker: Error response from daemon: create some_volume: conflict: volume name must be unique.

如果我尝试使用现有卷运行容器:

docker run -it -v some_volume:/abc/xyz a_docker_image /bin/bash

它返回:

docker: Error response from daemon: missing device in volume options.

====================

有人可以帮忙告诉我如何为docker安装卷插件btrfs 吗?除了一些关于插件的介绍(但不是如何安装)之外,我还没有找到任何有用的信息。提前谢谢。

正如@forevergenin在评论中所建议的,这是我的docker环境:

docker version

Client:
 Version:      1.11.0
 API version:  1.23
 Go version:   go1.5.4
 Git commit:   4dc5990
 Built:        Wed Apr 13 18:13:28 2016
 OS/Arch:      darwin/amd64

Server:
 Version:      1.11.0
 API version:  1.23
 Go version:   go1.5.4
 Git commit:   4dc5990
 Built:        Wed Apr 13 19:36:04 2016
 OS/Arch:      linux/amd64

docker info

Containers: 0
 Running: 0
 Paused: 0
 Stopped: 0
Images: 39
Server Version: 1.11.0
Storage Driver: aufs
 Root Dir: /mnt/sda1/var/lib/docker/aufs
 Backing Filesystem: extfs
 Dirs: 121
 Dirperm1 Supported: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: null host bridge
Kernel Version: 4.1.19-boot2docker
Operating System: Boot2Docker 1.11.0 (TCL 7.0); HEAD : 32ee7e9 - Wed Apr 13 20:06:49 UTC 2016
OSType: linux
Architecture: x86_64
CPUs: 1
Total Memory: 996.1 MiB
Name: default
ID: 74TB:OVH5:S3GD:UQUG:ILWG:5NVH:2MSH:5H7R:A5H4:GSLV:2Q6D:ZIR6
Docker Root Dir: /mnt/sda1/var/lib/docker
Debug mode (client): false
Debug mode (server): true
 File Descriptors: 15
 Goroutines: 32
 System Time: 2016-08-15T13:57:03.866016657Z
 EventsListeners: 0
Username: thyrlian
Registry: https://index.docker.io/v1/
Labels:
 provider=virtualbox

1 个答案:

答案 0 :(得分:1)

我是使用docker的btrfs新手,但这是我的理解:

使用btrfs作为存储驱动程序意味着docker将在内部对图像和容器使用btrfs(解释为here)。具体来说,请查看安装详细信息here:它们会让您创建一个btrfs分区并在其上挂载/var/lib/docker。在此之后重新启动docker守护程序时,docker info应告诉您"存储驱动程序:btrfs"。

使用btrfs驱动程序,图像的基础保存为int /var/lib/docker/btrfs/subvolumes,然后它们执行快照(但我不确定它们在何处完全保存它们)。但这是在没有你指定驱动程序的情况下自动完成的(我猜想当你有多个可以在给定文件系统上运行的驱动程序时指定驱动程序是有用的。但是当/ var / lib / docker是b / var时,btrfs驱动程序似乎是默认的。格式化为btrfs。

关于卷,我相信它们不会保存为btrfs子卷。它们似乎是/var/lib/docker/volumes/中的简单文件夹。同样,我可以想象这是docker的正常行为:图像和容器是分层的,但卷是简单的目录。

至少,这是我观察到的行为:

  • 如果我拉图像或创建容器,我会创建btrfs子卷。
  • 我可以通过简单地使用docker volume create testvol1创建一个卷并将其挂载到容器中。但那时它不是btrfs子体积。

如果您希望将卷放在btrfs子卷中,那么我相信您可能需要手动创建子卷并直接在其中装入卷。