2016-08-15 68 views
2

运行时命令:如何安装docker的btrfs卷插件?

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. 

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

谁能帮告诉我如何安装容积插件的btrfs的搬运工?我还没有找到任何有用的信息,除了关于插件的一些介绍(但不是如何安装)。提前致谢。

正如在评论@forevergenin建议,这里是我的搬运工环境:

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 
+0

你能分享更多关于环境的信息吗?像docker版本,你正在运行的主机操作系统(linux,macOS或windows--哪个版本)等等。你可以通过运行'docker version'命令来获得这些信息。 – forevergenin

+0

谢谢@forevergenin,我添加了'version'和'info'输出。 –

+0

太好了!我看到你正在运行OS X.我也在OS X上运行我的设置,但我运行的是docker version 1.12',并且在尝试创建btrfs卷时我没有遇到任何问题。 docker volume create --opt type = btrfs --name test_volume'创建卷时没有任何问题。如果可能的话,尝试将'docker'升级到'1.12版本'。如果你使用'homebrew',你可以通过运行'brew cask install docker'来完成。或者,您可以从https://www.docker.com/products/docker#/mac下载适用于OS X的本机版Docker。 – forevergenin

回答

1

我是新来与泊坞窗BTRFS,但这里是我的理解:

使用btrfs作为存储驱动程序意味着docker将在内部为图像和容器使用btrfs(解释为here)。具体来说,看看安装细节here:他们让你创建一个btrfs分区并在其上安装/var/lib/docker。当你重启Docker守护进程后,docker info应该告诉你“存储驱动:btrfs”。

使用btrfs驱动程序,图像的基地保存int /var/lib/docker/btrfs/subvolumes,然后他们做快照(但我不知道他们在哪里他们完全保存)。但是,这是在你没有指定驱动程序的情况下自动完成的(我想当你有多个驱动程序可以运行在给定的文件系统上时,指定驱动程序是很有用的。但是当/ var/lib/docker是btrfs驱动程序似乎是默认的在btrfs中格式化。

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

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

  • 如果我拉的图像或创建一个容器,我得到的btrfs创建子卷。
  • 我可以通过简单地使用docker volume create testvol1创建一个卷并将其安装在一个容器中。但是,它不是一个btrfs子卷。

如果您想让卷位于btrfs子卷中,那么我相信您可能需要手动创建子卷并将卷直接安装到卷中。