2016-08-15 127 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子卷中,那麼我相信您可能需要手動創建子卷並將卷直接安裝到卷中。