为了更直观了解数据卷挂载的操作,做个实验一一验证数据卷挂载的各种情况。
情况一、本地不存在文件挂载到容器存在文件
首先是当本地不存在该文件,而容器内存在该文件的情况,尝试把不存在的文件挂载到存在该文件的容器中。以一个 Alpine 镜像为例,这里把一个修改后的 Alpine 镜像打了新标签,叫做 volume_test:
# 本地目录不存在 test 文件。 $ docker run --name=test -v ~/test.txt:/etc/hosts -d volume_test 0cba2e50229df7508c616bd456c4ab131f2fe1a88385c34f8a5876fbc577b176 docker: Error response from daemon: oci runtime error: rootfs_linux.go:53: mounting "/var/lib/docker/devicemapper/mnt/6b83c07ebedcb828f34cac69eac5a85ce3a5f59e1e8688c8dae40198671d0ecb/rootfs/etc/hosts" to rootfs "/var/lib/docker/devicemapper/mnt/6b83c07ebedcb828f34cac69eac5a85ce3a5f59e1e8688c8dae40198671d0ecb/rootfs" caused "not a directory". # 启动容器失败。
情况二、本地不存在文件夹挂载到容器存在文件夹
然后是把本地不存在的文件夹挂载到容器内存在的文件夹,在 volume_test 镜像中存在一个 /srv 的文件夹,文件夹里面有一个 index.php 文件。
# 本地目录不存在 srv文件夹。 $ docker run --name=test -v ~/srv:/srv -d volume_test c71cf1cfa4932e3e398a7d6c4e2ae94f915b832f5506e374aedb19af4cb1ac62 # 启动正常,但是进入容器发现目录被清空。 $ docker exec -it test sh /srv # ls /srv #
上面两个例子已经告诉我们,数据卷的挂载是通过把本地的目录覆盖到容器中的。也就是说,当宿主机文件不存在时,不能挂载;当文件夹不存在时,挂载到容器会用一个空文件夹覆盖容器原有目录。
情况三、宿主机存在文件挂载到容器不存在文件
我们继续,假设宿主机存在文件,容器内不存在该文件:
# 本地目录存在 test.txt文件 $ docker run --name=test -v ~/test.txt:/srv/test.txt-d volume_test 2d6853c10643a735ae3d7f3aaac8c6344f9c75170e531f613d08db7cdf484e54 # 容器内存在 /srv 文件夹,里面原本有一个 index.php 。 $ docker exec -it test sh /srv # ls index.php test.txt /srv # # 可以看到文件挂载成功。
情况四、宿主机存在文件夹挂载到容器不存在文件夹
接下来是宿主机存在文件夹,容器不存在该文件夹,宿主机的 test 文件夹里面存在一个 hello 文件:
$ docker run --name=test -v ~/test:/srv/test -d volume_test c935ffa0d9fc5e5ac8f213a51a878e71056472b0597d2e385a29e5c748012958 # 进入容器,查看是否存在 test 文件夹,以及文件夹里面是否有 hello 文件。 $ docker exec -it test sh /srv # ls index.php test /srv # cd test/ /srv/test # ls hello /srv/test #
上面两个例子说明了,容器内部如果不存在文件,宿主机直接挂载。
情况五、宿主机文件夹挂载到容器文件
接下来假设宿主机存在 test 文件夹,而容器内部存在的是名为 test 文件,这样挂载会怎样呢?
$ docker run --name=test -v ~/test:/srv/test-d volume_test 385bc78e5333460da11f04535da27a3fd226df218f95c970ff2dd5609b17f816 docker: Error response from daemon: oci runtime error: rootfs_linux.go:53: mounting "/var/lib/docker/devicemapper/mnt/fd5c42e844c3550d1a372ed939ed57f90dcacbd375dfed1bedfbb71ef6f3f185/rootfs/etc/hosts" to rootfs "/var/lib/docker/devicemapper/mnt/fd5c42e844c3550d1a372ed939ed57f90dcacbd375dfed1bedfbb71ef6f3f185/rootfs" caused "not a directory".
上面的情况不出意外是启动错误。
情况六、同名文件夹挂载
那么假设宿主机是文件夹,容器也是文件夹,两个文件夹里面内容不一样,宿主机内部有一个 hello 文件,容器的文件夹里面有一个 index.php :
$ docker run --name=test -v ~/srv:/srv -d volume_test 3aec30122bd7010c694e0ff8b77f7b7b6bb6f850c258786db125313060fad43b$ docker exec-it test sh /srv # ls hello /srv # # 可以看到,宿主机文件夹会覆盖容器内部的文件夹。
情况七、同名文件挂载
假设宿主机有一个 test.txt 文件,里面写着 Hello World,而容器里面也存在一个 test.txt 文件,里面写着 Hi World,现在挂载文件:
$ docker run --name=test -v ~/test.txt:/srv/test.txt -d volume_test 047cbfe45b5bc868c864fe94f7a22643d52b644947f40260097dbb579de56c5c $ docker exec -it test sh /srv # cat /test Hello World /srv # # 宿主机会覆盖容器的文件。
情况八、宿主机文件挂载到容器文件夹
最后一种情况,宿主机存在文件 test.txt,而容器内部存在一个 test 的文件夹,现在把 文件挂载到文件夹中:
$ docker run --name=test -v ~/test.txt:/test -d volume_test 59b5fd74a1e9e17aa2a6a9be7900b16c7dd4b3c424a4fa72a7671fa1c51bdf69 docker: Error response from daemon: oci runtime error: rootfs_linux.go:53: mounting "/var/lib/docker/devicemapper/mnt/b201054ed36a189b5abb599082d0b5bcbe31d07611a0985deefd79d1221447fd/rootfs/home" to rootfs "/var/lib/docker/devicemapper/mnt/b201054ed36a189b5abb599082d0b5bcbe31d07611a0985deefd79d1221447fd/rootfs" caused "not a directory". # 启动失败。
小结:
宿主机文件
容器内文件
启动参数(加粗表示不存在)
容器启动情况
不存在
文件
-v ~/test.txt:/etc/hosts
启动错误
不存在
文件夹
-v ~/srv:/srv
启动正常
文件
不存在
-v ~/test.txt:/srv/test.txt
启动正常
文件夹
不存在
~/test:/srv/test
启动正常
文件夹
文件
~/test:/srv/test
启动错误
文件夹
文件夹
-v ~/srv:/srv
启动正常
文件
文件
-v ~/test.txt:/srv/test.txt
启动正常
文件
文件夹
-v ~/test.txt:/test
启动错误
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]