国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 服務(wù)器 > Web服務(wù)器 > 正文

詳解Docker目錄掛載的方法總結(jié)

2024-09-01 13:49:20
字體:
供稿:網(wǎng)友

Docker容器啟動(dòng)的時(shí)候,如果要掛載宿主機(jī)的一個(gè)目錄,可以用-v參數(shù)指定。

譬如我要啟動(dòng)一個(gè)centos容器,宿主機(jī)的/test目錄掛載到容器的/soft目錄,可通過以下方式指定:

# docker run -it -v /test:/soft centos /bin/bash

這樣在容器啟動(dòng)后,容器內(nèi)會(huì)自動(dòng)創(chuàng)建/soft的目錄。通過這種方式,我們可以明確一點(diǎn),即-v參數(shù)中,冒號(hào)":"前面的目錄是宿主機(jī)目錄,后面的目錄是容器內(nèi)目錄。

貌似簡(jiǎn)單,其實(shí)不然,下面我們來驗(yàn)證一下:

一、容器目錄不可以為相對(duì)路徑

[root@localhost ~]# docker run -it -v /test:soft centos /bin/bashinvalid value "/test:soft" for flag -v: soft is not an absolute pathSee 'docker run --help'.

直接報(bào)錯(cuò),提示soft不是一個(gè)絕對(duì)路徑,所謂的絕對(duì)路徑,必須以下斜線“/”開頭。

二、宿主機(jī)目錄如果不存在,則會(huì)自動(dòng)生成

如果宿主機(jī)中存在/test目錄,首先刪除它

[root@localhost ~]# rm -rf /test[root@localhost ~]# ls /bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var

啟動(dòng)容器

[root@localhost ~]# docker run -it -v /test:/soft centos /bin/bash[root@a487a3ca7997 /]# lsbin dev etc home lib lib64 lost+found media mnt opt proc root run sbin soft srv sys tmp usr var

查看宿主機(jī),發(fā)現(xiàn)新增了一個(gè)/test目錄

[root@localhost ~]# ls /bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys test tmp usr var

三、宿主機(jī)的目錄如果為相對(duì)路徑呢?

這次,我們換個(gè)目錄名test1試試

# docker run -it -v test1:/soft centos /bin/bash

再到宿主機(jī)上查看是否新增了一個(gè)/test1目錄,結(jié)果沒有,是不是因?yàn)槲矣玫氖窍鄬?duì)路徑,所以生成的test1目錄在當(dāng)前目錄下,結(jié)果發(fā)現(xiàn)還是沒有。那容器內(nèi)的/soft目錄掛載到哪里去了?通過docker inspect命令,查看容器“Mounts”那一部分,我們可以得到這個(gè)問題的答案。

"Mounts": [    {      "Name": "test1",      "Source": "/var/lib/docker/volumes/test1/_data",      "Destination": "/soft",      "Driver": "local",      "Mode": "z",      "RW": true    }  ],

可以看出,容器內(nèi)的/soft目錄掛載的是宿主機(jī)上的/var/lib/docker/volumes/test1/_data目錄

原來,所謂的相對(duì)路徑指的是/var/lib/docker/volumes/,與宿主機(jī)的當(dāng)前目錄無關(guān)。

四、如果只是-v指定一個(gè)目錄,這個(gè)又是如何對(duì)應(yīng)呢?

啟動(dòng)一個(gè)容器

[root@localhost ~]# docker run -it -v /test2 centos /bin/bash[root@ea24067bc902 /]# lsbin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys test2 tmp usr var

同樣使用docker inspect命令查看宿主機(jī)的掛載目錄

"Mounts": [    {      "Name": "96256232eb74edb139d652746f0fe426e57fbacdf73376963e3acdb411b3d73a",      "Source": "/var/lib/docker/volumes/96256232eb74edb139d652746f0fe426e57fbacdf73376963e3acdb411b3d73a/_data",      "Destination": "/test2",      "Driver": "local",      "Mode": "",      "RW": true    }  ],

可以看出,同3中的結(jié)果類似,只不過,它不是相對(duì)路徑的目錄名,而是隨機(jī)生成的一個(gè)目錄名。

五、如果在容器內(nèi)修改了目錄的屬主和屬組,那么對(duì)應(yīng)的掛載點(diǎn)是否會(huì)修改呢?

首先開啟一個(gè)容器,查看容器內(nèi)/soft目錄的屬性

[root@localhost ~]# docker run -it -v /test:/soft centos /bin/bash[root@b5ed8216401f /]# ll -d /soft/drwxr-xr-x 2 root root 6 Sep 24 03:48 /soft/

查看宿主機(jī)內(nèi)/test目錄的屬性

[root@localhost ~]# ll -d /test/drwxr-xr-x 2 root root 6 Sep 24 11:48 /test/

在容器內(nèi)新建用戶,修改/soft的屬主和屬組

[root@b5ed8216401f /]# useradd victor[root@b5ed8216401f /]# chown -R victor.victor /soft/[root@b5ed8216401f /]# ll -d /soft/drwxr-xr-x 2 victor victor 6 Sep 24 03:48 /soft/

再來看看宿主機(jī)內(nèi)/test目錄的屬主和屬組是否會(huì)發(fā)生變化?

[root@localhost ~]# ll -d /test/drwxr-xr-x 2 mycat mycat 6 Sep 24 11:48 /test/

竟然變?yōu)閙ycat了。。。

原來,這個(gè)與UID有關(guān)系,UID,即“用戶標(biāo)識(shí)號(hào)”,是一個(gè)整數(shù),系統(tǒng)內(nèi)部用它來標(biāo)識(shí)用戶。一般情況下它與用戶名是一一對(duì)應(yīng)的。

首先查看容器內(nèi)victor對(duì)應(yīng)的UID是多少,

[root@b5ed8216401f /]# cat /etc/passwd | grep victorvictor:x:1000:1000::/home/victor:/bin/bash

victor的UID為1000,那么宿主機(jī)內(nèi)1000對(duì)應(yīng)的用戶是誰(shuí)呢?

[root@localhost ~]# cat /etc/passwd |grep 1000mycat:x:1000:1000::/home/mycat:/bin/bash

可以看出,宿主機(jī)內(nèi)UID 1000對(duì)應(yīng)的用戶是mycat。

六、容器銷毀了,在宿主機(jī)上新建的掛載目錄是否會(huì)消失?

在這里,主要驗(yàn)證兩種情況:一、指定了宿主機(jī)目錄,即 -v /test:/soft。二、沒有指定宿主機(jī)目錄,即-v /soft

第一種情況:

[root@localhost ~]# rm -rf /test  --首先刪除宿主機(jī)的/test目錄[root@localhost ~]# ls /  --可以看到,宿主機(jī)上無/test目錄bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var[root@localhost ~]# docker run -it --name=centos_test -v /test:/soft centos /bin/bash --啟動(dòng)容器,為了刪除方便,我用--name參數(shù)指定了容器的名字[root@82ad7f3a779a /]# exitexit[root@localhost ~]# docker rm centos_test  --刪除容器centos_test[root@localhost ~]# ls /  --發(fā)現(xiàn) /test目錄依舊存在bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys test tmp usr var

可以看出,即便容器銷毀了,新建的掛載目錄不會(huì)消失。進(jìn)一步也可驗(yàn)證,如果宿主機(jī)目錄的屬主和屬組發(fā)生了變化,容器銷毀后,宿主機(jī)目錄的屬主和屬組不會(huì)恢復(fù)到掛載之前的狀態(tài)。

第二種情況,通過上面的驗(yàn)證知道,如果沒有指定宿主機(jī)的目錄,則容器會(huì)在/var/lib/docker/volumes/隨機(jī)配置一個(gè)目錄,那么我們看看這種情況下的容器銷毀是否會(huì)導(dǎo)致相應(yīng)目錄的刪除

首先啟動(dòng)容器

[root@localhost ~]# docker run -it --name=centos_test -v /soft centos /bin/bash[root@6b75579ec934 /]# exitexit

通過docker inspect命令查看容器在宿主機(jī)上生成的掛載目錄

"Mounts": [    {      "Name": "b53164cb1c9f1917788638692fb22ad11994cf1fbbc2461b6c390cd3e10ea301",      "Source": "/var/lib/docker/volumes/b53164cb1c9f1917788638692fb22ad11994cf1fbbc2461b6c390cd3e10ea301/_data",      "Destination": "/soft",      "Driver": "local",      "Mode": "",      "RW": true    }  ],

對(duì)應(yīng)的是/var/lib/docker/volumes/b53164cb1c9f1917788638692fb22ad11994cf1fbbc2461b6c390cd3e10ea301/_data目錄

銷毀容器,看目錄是否存在

[root@localhost ~]# docker rm centos_testcentos_test[root@localhost ~]# ll /var/lib/docker/volumes/b53164cb1c9f1917788638692fb22ad11994cf1fbbc2461b6c390cd3e10ea301total 0drwxr-xr-x 2 root root 6 Sep 24 14:25 _data

發(fā)現(xiàn)該目錄依舊存在,即便重啟了docker服務(wù),該目錄依舊存在

[root@localhost ~]# systemctl restart docker[root@localhost ~]# ll /var/lib/docker/volumes/b53164cb1c9f1917788638692fb22ad11994cf1fbbc2461b6c390cd3e10ea301total 0drwxr-xr-x 2 root root 6 Sep 24 14:25 _data

七、掛載宿主機(jī)已存在目錄后,在容器內(nèi)對(duì)其進(jìn)行操作,報(bào)“Permission denied”。

可通過兩種方式解決:

1> 關(guān)閉selinux。

臨時(shí)關(guān)閉:# setenforce 0

永久關(guān)閉:修改/etc/sysconfig/selinux文件,將SELINUX的值設(shè)置為disabled。

2> 以特權(quán)方式啟動(dòng)容器

指定--privileged參數(shù)

如:

# docker run -it --privileged=true -v /test:/soft centos /bin/bash

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持VEVB武林網(wǎng)。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 肥西县| 洛扎县| 德钦县| 岐山县| 绥阳县| 汝阳县| 青铜峡市| 新平| 岳阳市| 肇州县| 弥勒县| 安徽省| 高台县| 山东| 扶绥县| 思南县| 屏山县| 广南县| 阿合奇县| 广宗县| 彭泽县| 南昌县| 佛冈县| 建瓯市| 吉安县| 嘉鱼县| 固原市| 开远市| 太原市| 余庆县| 凉城县| 西峡县| 开原市| 洛宁县| 庆城县| 江川县| 杭锦后旗| 报价| 长子县| 湘阴县| 东丰县|