Docker中的數據可以存儲在類似於虛擬機磁盤的介質中,在Docker中稱為數據卷(Data Volume)。數據卷可以用來存儲Docker應用的數據,也可以用來在Docker容器間進行數據共享。數據卷呈現給Docker容器的形式就是一個目錄,支持多個容器間共享,修改也不會影響鏡像。使用Docker的數據卷,類似在系統中使用 mount 掛載一個文件系統。操作Docker數據卷,需要理解以下幾點:
============================================================================
1)一個數據卷是一個特別指定的目錄,該目錄利用容器的UFS文件系統可以為容器提供一些穩定的特性或者數據共享。數據卷可以在多個容器之間共享。
============================================================================
2)創建數據卷,只要在docker run命令后面跟上-v參數即可創建一個數據卷,當然也可以跟多個-v參數來創建多個數據卷,當創建好帶有數據卷的容器后,就可以在其他容器中通過--volumes-froms參數來掛載該數據卷了,而不管該容器是否運行。也可以在Dockerfile中通過VOLUME指令來增加一個或者多個數據卷。
============================================================================
3)如果有一些數據想在多個容器間共享,或者想在一些臨時性的容器中使用該數據,那么最好的方案就是你創建一個數據卷容器,然后從該臨時性的容器中掛載該數據卷容器的數據。這樣,即使刪除了剛開始的第一個數據卷容器或者中間層的數據卷容器,只要有其他容器使用數據卷,數據卷都不會被刪除的。
============================================================================
4)不能使用docker export、save、cp等命令來備份數據卷的內容,因為數據卷是存在於鏡像之外的。備份方法: 創建一個新容器,掛載數據卷容器,同時掛載一個本地目錄,然后把遠程數據卷容器的數據卷通過備份命令備份到映射的本地目錄里面。如下:
# docker run --rm --volumes-from DATA -v $(pwd):/backup busybox tar cvf /backup/backup.tar /data
============================================================================
5)可以把一個本地主機的目錄當做數據卷掛載在容器上,同樣是在docker run后面跟-v參數,不過-v后面跟的不再是單獨的目錄了,它是[host-dir]:[container-dir]:[rw|ro]這樣格式的,其中host-dir是一個絕對路徑的地址,如果host-dir不存在,則docker會創建一個新的數據卷,如果host-dir存在,但是指向的是一個不存在的目錄,則docker也會創建該目錄,然后使用該目錄做數據源。
Docker Volume數據卷可以實現:
-> 繞過“拷貝寫”系統,以達到本地磁盤IO的性能,(比如運行一個容器,在容器中對數據卷修改內容,會直接改變宿主機上的數據卷中的內容,所以是本地磁盤IO的性能,而不是先在容器中寫一份,最后還要將容器中的修改的內容拷貝出來進行同步。)
-> 繞過“拷貝寫”系統,有些文件不需要在docker commit打包進鏡像文件。
-> 數據卷可以在容器間共享和重用數據
-> 數據卷可以在宿主和容器間共享數據
-> 數據卷數據改變是直接修改的
-> 數據卷是持續性的,直到沒有容器使用它們。即便是初始的數據卷容器或中間層的數據卷容器刪除了,只要還有其他的容器使用數據卷,那么里面的數據都不會丟失。
Docker數據持久化:
容器在運行期間產生的數據是不會寫在鏡像里面的,重新用此鏡像啟動新的容器就會初始化鏡像,會加一個全新的讀寫入層來保存數據。如果想做到數據持久化,Docker提供數據卷(Data volume)或者數據容器卷來解決問題,另外還可以通過commit提交一個新的鏡像來保存產生的數據。
一、創建一個數據卷
如下為容器添加一個數據卷,並將容器名改為data。這個數據卷在容器里的目錄是/opt/data [root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/ubuntu latest 0ef2e08ed3fa 2 weeks ago 130 MB [root@localhost ~]# docker run --name data -v /opt/data -t -i docker.io/ubuntu /bin/bash root@2b9aebcf6ce8:/# cd /opt/data/ root@2b9aebcf6ce8:/opt/data# ls root@2b9aebcf6ce8:/opt/data# echo "123" > 123 root@2b9aebcf6ce8:/opt/data# echo "123123" > 123123 root@2b9aebcf6ce8:/opt/data# ls 123 123123 [root@localhost volumes]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2b9aebcf6ce8 docker.io/ubuntu "/bin/bash" 49 seconds ago Up 48 seconds data 在宿主機上,查看對應上面的那個數據卷的目錄路徑: [root@localhost ~]# docker inspect data|grep /var/lib/docker/volumes "Source": "/var/lib/docker/volumes/89d6562b9c1fe10dd21707cb697a5d481b3c1b000a69b762f540fa826a16972a/_data", [root@localhost ~]# ls /var/lib/docker/volumes/89d6562b9c1fe10dd21707cb697a5d481b3c1b000a69b762f540fa826a16972a/_data 123 123123 [root@localhost ~]# echo "asdhfjashdfjk" >> /var/lib/docker/volumes/89d6562b9c1fe10dd21707cb697a5d481b3c1b000a69b762f540fa826a16972a/_data/123 [root@localhost ~]# root@2b9aebcf6ce8:/opt/data# ls 123 123123 root@2b9aebcf6ce8:/opt/data# cat 123 123 asdhfjashdfjk
二、掛載宿主機文件或目錄到容器數據卷
可以直接掛載宿主機文件或目錄到容器里,可以理解為目錄映射,這樣就可以讓所有的容器共享宿主機數據,從而只需要改變宿主機的數據源就能夠影響到所有的容器數據。 注意: -v后面的映射關系是"宿主機文件/目錄:容器里對應的文件/目錄",其中,宿主機上的文件/目錄是要提前存在的,容器里對應的文件/目錄會自動創建。 數據卷權限: 掛載的數據默認為可讀寫權限。 但也可以根據自己的需求,將容器里掛載共享的數據設置為只讀,這樣數據修改就只能在宿主機上操作。如下實例: 1)掛載宿主機文件到容器上 [root@localhost ~]# cat /etc/web.list 192.168.1.100 192.168.1.101 192.168.1.103 [root@localhost ~]# docker run -t -i --name test -v /etc/web.list:/etc/web.list:ro docker.io/centos /bin/bash [root@e21a3fefa3ae /]# cat /etc/web.list 192.168.1.100 192.168.1.101 192.168.1.103 [root@e21a3fefa3ae /]# echo "192.168.1.115" >> /etc/web.list bash: /etc/web.list: Read-only file system [root@e21a3fefa3ae /]# 在宿主機上修改共享數據 [root@localhost ~]# echo "192.168.1.115" >> /etc/web.list [root@localhost ~]# [root@e21a3fefa3ae /]# cat /etc/web.list 192.168.1.100 192.168.1.101 192.168.1.103 192.168.1.115 2)掛載宿主機目錄到容器上 [root@localhost ~]# mkdir /var/huanqiupc [root@localhost ~]# echo "test" > /var/huanqiupc/test [root@localhost ~]# echo "test1" > /var/huanqiupc/test1 [root@localhost ~]# docker run -t -i --name hqsb -v /var/huanqiupc:/opt/huantime docker.io/centos /bin/bash [root@87cf93ce46a9 /]# cd /opt/huantime/ [root@87cf93ce46a9 huantime]# ls test test1 [root@87cf93ce46a9 huantime]# cat test test [root@87cf93ce46a9 huantime]# cat test1 test1 [root@87cf93ce46a9 huantime]# echo "1231" >>test [root@87cf93ce46a9 huantime]# echo "44444" >>test1 宿主機上查看 [root@localhost ~]# cat /var/huanqiupc/test test 1231 [root@localhost ~]# cat /var/huanqiupc/test1 test1 44444 3)掛載多個目錄 [root@localhost ~]# mkdir /opt/data1 /opt/data2 [root@localhost ~]# echo "123456" > /opt/data1/test1 [root@localhost ~]# echo "abcdef" > /opt/data2/test2 [root@localhost ~]# docker run --name data -v /opt/data1:/var/www/data1 -v /opt/data2:/var/www/data2:ro -t -i docker.io/ubuntu /bin/bash root@cf2d57b9bee1:/# ls /var/www/data1 test1 root@cf2d57b9bee1:/# ls /var/www/data2 test2 root@cf2d57b9bee1:/# cat /var/www/data1/test1 123456 root@cf2d57b9bee1:/# cat /var/www/data2/test2 abcdef root@cf2d57b9bee1:/# echo "date1" >> /var/www/data1/test1 root@cf2d57b9bee1:/# echo "date2" >> /var/www/data2/test2 bash: /var/www/data2/test2: Read-only file system root@cf2d57b9bee1:/#
三、創建數據卷容器
啟動一個名為xqsj_Container容器,此容器包含兩個數據卷/var/volume1和/var/volume2(這兩個數據卷目錄是在容器里的,容器創建的時候會自動生成這兩目錄)
注意一個細節: 下面的創建命令中,沒有加-t和-i參數,所以這個容器創建好之后是登陸不了的! -i:表示以“交互模式”運行容器 -t:表示容器啟動后會進入其命令行 [root@linux-node2 ~]# docker run -v /var/volume1 -v /var/volume2 --name xqsj_Container centos /bin/bash [root@linux-node2 ~]# 所以要想創建容器后能正常登陸,就需要添加上面兩個參數 [root@localhost ~]# docker run -t -i -v /var/volume1 -v /var/volume2 --name xqsj_Container centos /bin/bash [root@73a34f3c1cd9 /]#
查看宿主機上與數據卷對應的目錄路徑:
[root@localhost ~]# docker inspect xqsj_Container|grep /var/lib/docker/volumes "Source": "/var/lib/docker/volumes/b8d2e5bcadf2550abd36ff5aa544c721a45464a4406fb50979815de773086627/_data", "Source": "/var/lib/docker/volumes/a34fa3a0a7a2f126b0d30a32b1034f20917ca7bd0dda346014d768b5ebb68f6b/_data", 由上面命令結果可以查到,兩個數據卷/var/volume1和/var/volume2下的數據在/var/lib/docker/volumes/下對於的兩個目錄的_data下面
創建App_Container容器,掛載xqsj_Container容器中的數據卷
[root@linux-node2 ~]# docker run -t -i --rm --volumes-from xqsj_Container --name App_Container centos /bin/bash
[root@b9891bcdfed0 /]# ls /var/volume1 //發現這兩個數據卷都存在
[root@b9891bcdfed0 /]# ls /var/volume2
[root@b9891bcdfed0 /]# echo "this is volume1" > /var/volume1/test1
[root@b9891bcdfed0 /]# echo "this is volume2" > /var/volume1/test2
可以再創建一個容器,掛載App_Container中從xqsj_Container掛載的數據卷。當然也可以直接掛載初始的xqsj_Container容器數據卷
[root@linux-node2 ~]# docker run -t -i --rm --volumes-from App_Container --name LastApp_Container centos /bin/bash
[root@b4c27e360614 /]# ls /var/volume1
test1
[root@b4c27e360614 /]# ls /var/volume2
test2
[root@b4c27e360614 /]# cat /var/volume1/test1
this is volume1
[root@b4c27e360614 /]# cat /var/volume2/test2
this is volume2
即便是刪除了初始的數據卷容器xqsj_Container,或是刪除了其它容器,但只要是有容器在使用該數據卷,那么它里面的數據就不會丟失!(除非是沒有容器在使用它們)
四、備份數據卷
$ sudo docker run --rm --volumes-from test -v $(pwd):/backup ubuntu:14.04 tar cvf /backup/test.tar /test tar: Removing leading `/' from member names /test/ /test/b /test/d /test/c /test/a 以上命令表示: 啟動一個新的容器並且從test容器中掛載卷,然后掛載當前目錄到容器中為backup,並備份test卷中所有的數據為test.tar,執行完成之后刪除容器--rm,此時備份就在當前的目錄下,名為test.tar。 注意:后面的/test是數據卷的目錄路徑(即數據卷創建時在容器里的路徑) $ ls 宿主機當前目錄下產生了test卷的備份文件test.tar ---------------------------------------------看看下面的一個實例--------------------------------------------- 先創建一個容器wang,包含兩個數據卷/var/volume1和/var/volume2(這兩個目錄是在容器里的數據卷路徑) [root@localhost ~]# docker run -t -i -v /var/volume1 -v /var/volume2 --name wang docker.io/centos /bin/bash [root@83eb43492ae7 /]# 根據Docker的數據持久化之數據卷容器可知,上面創建的wang數據卷容器掛載了/var/volume1和/var/volume2兩個目錄 然后在數據卷里寫些數據,以供測試。 [root@83eb43492ae7 /]# cd /var/volume1 [root@83eb43492ae7 volume1]# echo "test1" > test1 [root@83eb43492ae7 volume1]# echo "test11" > test11 [root@83eb43492ae7 volume1]# echo "test111" > test111 [root@83eb43492ae7 volume1]# ls test1 test11 test111 [root@83eb43492ae7 volume1]# cd ../volume2 [root@83eb43492ae7 volume2]# echo "test2" > test2 [root@83eb43492ae7 volume2]# echo "test22" > test22 [root@83eb43492ae7 volume2]# echo "test222" > test222 [root@83eb43492ae7 volume2]# ls test2 test22 test222 [root@83eb43492ae7 volume2]# 然后進行這兩個數據卷的備份 [root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 83eb43492ae7 docker.io/centos "/bin/bash" 2 minutes ago Up 2 minutes wang 現在開始進行數據卷的備份操作: 為了利用數據卷容器備份,使用--volumes-from標記來創建一個加載wang容器卷的容器,並從主機掛載當前目錄到容器的/backup目錄。並備份wang卷中的數據,執行完成之后刪除容器--rm,此時備份就在當前的目錄下了。 1)備份wang容器中的/var/volume1數據卷數據(注意下面:命令中的-i和-t這兩個參數加不加都可以;--rm加上,備份后就會自動刪除這個容器,如果不加這個--rm參數,那么備份后的容器就會保留,docker ps -a就會查看到) [root@localhost ~]# docker run -i -t --rm --volumes-from wang -v $(pwd):/backup docker.io/centos tar cvf /backup/backup1.tar /var/volume1 tar: Removing leading `/' from member names /var/volume1/ /var/volume1/test1 /var/volume1/test11 /var/volume1/test111 2)備份wang容器中的/var/volume2數據卷數據 [root@localhost ~]# docker run -i -t --rm --volumes-from wang -v $(pwd):/backup docker.io/centos tar cvf /backup/backup2.tar /var/volume2 tar: Removing leading `/' from member names /var/volume2/ /var/volume2/test2 /var/volume2/test22 /var/volume2/test222 3)備份wang容器中的/var/volume1和/var/volume2數據卷數據 [root@localhost ~]# docker run -i -t --rm --volumes-from wang -v $(pwd):/backup docker.io/centos tar cvf /backup/backup.tar /var/volume1 /var/volume2 tar: Removing leading `/' from member names /var/volume1/ /var/volume1/test1 /var/volume1/test11 /var/volume1/test111 /var/volume2/ /var/volume2/test2 /var/volume2/test22 /var/volume2/test222 [root@localhost ~]# ls anaconda-ks.cfg a.py backup1.tar backup2.tar backup.tar mkimage-yum.sh pipework var wang.tar 這樣,數據卷容器中的數據就備份完成了. 簡言之就是: 先創建一個容器,並掛載要備份的容器數據卷,再掛載數據卷(pwd):/backup目錄到容器/bakcup,在容器中執行備份/data目錄到/backup,也就是備份到宿主機$(pwd):/backup目錄。
五、恢復或遷移數據卷
可以恢復給同一個容器或者另外的容器,新建容器並解壓備份文件到新的容器數據卷 $ sudo docker run -t -i -d -v /test --name test4 ubuntu:14.04 /bin/bash $ sudo docker run --rm --volumes-from test4 -v $(pwd):/backup ubuntu:14.04 tar xvf /backup/test.tar -C / 恢復之前的文件到新建卷中,執行完后自動刪除容器 test/ test/b test/d test/c test/a -----------------------------接着上面的實例進行數據卷恢復操作-------------------------- [root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 531c9d8adf4c docker.io/centos "/bin/bash" 2 minutes ago Up 44 seconds wang 1)恢復數據給同一個容器 測了測試效果,先刪除數據卷(注意:數據卷目錄刪除不了,只能刪除其中的數據。) [root@localhost ~]# docker attach wang [root@531c9d8adf4c ~]# ls /var/volume1 test1 test11 test111 [root@531c9d8adf4c ~]# ls /var/volume2 test2 test22 test222 [root@531c9d8adf4c ~]# rm -rf /var/volume1 /var/volume2 rm: cannot remove '/var/volume1': Device or resource busy rm: cannot remove '/var/volume2': Device or resource busy [root@531c9d8adf4c ~]# ls /var/volume2 [root@531c9d8adf4c ~]# ls /var/volume1 現在進行數據卷恢復,恢復數據卷中的所有數據: [root@localhost ~]# ls anaconda-ks.cfg a.py backup1.tar backup2.tar backup.tar mkimage-yum.sh pipework var wang.tar 注意-C后面的路徑,這個路徑表示將數據恢復到容器里的路徑。 命令中用"/",即表示將backup.tar中的數據解壓到容器的/路徑下。后面跟什么路徑,就解壓到這個路徑下。因此這里用"/" [root@localhost ~]# docker run --rm --volumes-from wang -v $(pwd):/backup docker.io/centos tar xvf /backup/backup.tar -C / var/volume1/ var/volume1/test1 var/volume1/test11 var/volume1/test111 var/volume2/ var/volume2/test2 var/volume2/test22 var/volume2/test222 再次到容器里查看,發現數據卷里的數據已經恢復了 [root@531c9d8adf4c ~]# ls /var/volume1 test1 test11 test111 [root@531c9d8adf4c ~]# ls /var/volume2 test2 test22 test222 2)恢復數據給另外的容器,新建容器並解壓備份文件到新的容器數據卷 即新建一個容器huihui,將上面備份的數據卷數據恢復到這個新容器里。 [root@localhost ~]# docker run -t -i -v /var/volume1 -v /var/volume2 --name huihui docker.io/centos /bin/bash [root@f6ff380e0b7f var]# ls /var/volume1 [root@f6ff380e0b7f var]# ls /var/volume2 [root@localhost ~]# ls anaconda-ks.cfg a.py backup1.tar backup2.tar backup.tar mkimage-yum.sh pipework var wang.tar [root@localhost ~]# docker run --rm --volumes-from huihui -v $(pwd):/backup docker.io/centos tar xvf /backup/backup.tar -C / var/volume1/ var/volume1/test1 var/volume1/test11 var/volume1/test111 var/volume2/ var/volume2/test2 var/volume2/test22 var/volume2/test222 [root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 813afe297b60 docker.io/centos "/bin/bash" 17 seconds ago Up 16 seconds huihui 這里注意一下: 新容器創建時掛載的數據卷路徑最好是和之前備份的數據卷路徑一致 如下: 1)新建容器掛載的數據卷只是備份數據卷的一部分,那么恢復的時候也只是恢復一部分數據。如下,新容器創建時只掛載/var/volume1 [root@localhost ~]# docker run -t -i -v /var/volume1 --name huihui docker.io/centos /bin/bash [root@12dd8d742259 /]# ls /var/volume1/ [root@12dd8d742259 /]# ls /var/volume2 ls: cannot access /var/volume2: No such file or directory [root@localhost ~]# docker run --rm --volumes-from huihui -v $(pwd):/backup docker.io/centos tar xvf /backup/backup.tar -C / var/volume1/ var/volume1/test1 var/volume1/test11 var/volume1/test111 var/volume2/ var/volume2/test2 var/volume2/test22 var/volume2/test222 [root@localhost ~]# 查看容器,發現只恢復了/var/volume1的數據,/var/volume2數據沒有恢復,因為沒有容器創建時沒有掛載這個。 [root@localhost ~]# docker run -t -i -v /var/volume1 --name huihui docker.io/centos /bin/bash [root@12dd8d742259 /]# ls /var/volume1/ [root@12dd8d742259 /]# ls /var/volume2 ls: cannot access /var/volume2: No such file or directory 2)新容器創建時只掛載/var/volume2 [root@localhost ~]# docker run -t -i -v /var/volume2 --name huihui docker.io/centos /bin/bash [root@da3a3d2c95e0 /]# ls /var/volume2/ [root@da3a3d2c95e0 /]# ls /var/volume1 ls: cannot access /var/volume1: No such file or directory [root@localhost ~]# docker run --rm --volumes-from huihui -v $(pwd):/backup docker.io/centos tar xvf /backup/backup.tar -C / var/volume1/ var/volume1/test1 var/volume1/test11 var/volume1/test111 var/volume2/ var/volume2/test2 var/volume2/test22 var/volume2/test222 [root@localhost ~]# [root@da3a3d2c95e0 /]# ls /var/volume1 ls: cannot access /var/volume1: No such file or directory [root@da3a3d2c95e0 /]# ls /var/volume2/ test2 test22 test222 3)如果新容器創建時掛載的數據卷目錄跟之前備份的路徑不一致 [root@localhost ~]# docker run -t -i -v /var/huihui --name huihui docker.io/centos /bin/bash [root@9bad9b3bde71 /]# ls /var/huihui/ [root@9bad9b3bde71 /]# 如果解壓時-C后面跟的路徑不是容器掛載的容器,那么數據恢復不了,如下 [root@localhost ~]# docker run --rm --volumes-from huihui -v $(pwd):/backup docker.io/centos tar xvf /backup/backup.tar -C / var/volume1/ var/volume1/test1 var/volume1/test11 var/volume1/test111 var/volume2/ var/volume2/test2 var/volume2/test22 var/volume2/test222 發現容器內數據沒有恢復 [root@9bad9b3bde71 /]# ls /var/huihui/ [root@9bad9b3bde71 /]# 但是如果解壓時-C后面跟的是容器掛載的路徑,數據就能正常恢復 [root@localhost ~]# docker run --rm --volumes-from huihui -v $(pwd):/backup docker.io/centos tar xvf /backup/backup.tar -C /var/huihui var/volume1/ var/volume1/test1 var/volume1/test11 var/volume1/test111 var/volume2/ var/volume2/test2 var/volume2/test22 var/volume2/test222 [root@localhost ~]# 發現容器內數據已經恢復了 [root@9bad9b3bde71 /]# ls /var/huihui/ var [root@9bad9b3bde71 /]# ls /var/huihui/var/ volume1 volume2 [root@9bad9b3bde71 /]# ls /var/huihui/var/volume1 test1 test11 test111 [root@9bad9b3bde71 /]# ls /var/huihui/var/volume2 test2 test22 test222
六、刪除數據卷
Volume 只有在下列情況下才能被刪除: 1)docker rm -v刪除容器時添加了-v選項 2)docker run --rm運行容器時添加了--rm選項 否則,會在/var/lib/docker/volumes目錄中遺留很多不明目錄。 可以使用下面方式找出,然后刪除_data目錄下的數據文件 [root@localhost volumes]# docker inspect huihui|grep /var/lib/docker/volumes "Source": "/var/lib/docker/volumes/97aa95420e66de20abbe618fad8d0c1da31c54ce97e32a3892fa921c7942d42b/_data", 可以使用 docker rm -v 命令在刪除容器時刪除該容器的卷。示例如下: [root@localhost volumes]# docker run -d -P --name huihui -v /www docker.io/centos 69199905a74cb360935e32f4e99f7f11319f6aa36033a920aa0bae25874f5c69 [root@localhost volumes]# docker volume ls DRIVER VOLUME NAME local 5341c03f3b94f13f4c86d88ccb0f3b63487adf30dea7ae6b2d06e947235e7330 local 97aa95420e66de20abbe618fad8d0c1da31c54ce97e32a3892fa921c7942d42b local data_volume [root@localhost volumes]# docker rm -vf huihui huihui [root@localhost volumes]# docker volume ls DRIVER VOLUME NAME local 5341c03f3b94f13f4c86d88ccb0f3b63487adf30dea7ae6b2d06e947235e7330 local data_volume
===================== Docker新版本出現docker volume 命令:創建數據卷 ======================
Docker 新版本中引入了 docker volume 命令來管理 Docker volume。 使用默認的 'local' driver 創建一個volume數據卷 [root@localhost ~]# docker volume create --name kevin kevin [root@localhost ~]# docker volume ls DRIVER VOLUME NAME local kevin [root@localhost ~]# ll /var/lib/docker/volumes total 24 drwxr-xr-x 3 root root 19 Oct 28 00:32 kevin -rw------- 1 root root 32768 Oct 28 00:32 metadata.db 使用這個名為kevin的數據卷 [root@localhost ~]# docker run -d -P --name test1 -v kevin:/volume docker.io/centos 375ef74722404f5c52fde9f2ea7ea322c57e07fbac0b0e69825f077328fdb363 [root@localhost ~]# docker inspect test1 ......... "Mounts": [ { "Type": "volume", "Name": "kevin", "Source": "/var/lib/docker/volumes/kevin/_data", "Destination": "/volume", "Driver": "local", "Mode": "z", "RW": true, "Propagation": "" } 即將kevin數據卷對應在本機上的目錄/var/lib/docker/volumes/kevin/_data掛載給容器內的 /volume 目錄。