- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章浅谈Docker 容器数据卷挂载小结由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
为了更直观了解数据卷挂载的操作,做个实验一一验证数据卷挂载的各种情况.
情况1、本地不存在文件挂载到容器存在文件 。
首先是当本地不存在该文件,而容器内存在该文件的情况,尝试把不存在的文件挂载到存在该文件的容器中。以一个 Alpine 镜像为例,这里把一个修改后的 Alpine 镜像打了新标签,叫做 volume_test:
1
2
3
4
5
|
# 本地目录不存在 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"
.
# 启动容器失败。
|
情况2、本地不存在文件夹挂载到容器存在文件夹 。
然后是把本地不存在的文件夹挂载到容器内存在的文件夹,在 volume_test 镜像中存在一个 /srv 的文件夹,文件夹里面有一个 index.php 文件.
1
2
3
4
5
6
7
|
# 本地目录不存在 srv文件夹。
$ docker run --name=
test
-
v
~
/srv
:
/srv
-d volume_test
c71cf1cfa4932e3e398a7d6c4e2ae94f915b832f5506e374aedb19af4cb1ac62
# 启动正常,但是进入容器发现目录被清空。
$ docker
exec
-it
test
sh
/srv
# ls
/srv
#
|
上面两个例子已经告诉我们,数据卷的挂载是通过把本地的目录覆盖到容器中的。也就是说,当宿主机文件不存在时,不能挂载;当文件夹不存在时,挂载到容器会用一个空文件夹覆盖容器原有目录.
情况3、宿主机存在文件挂载到容器不存在文件 。
我们继续,假设宿主机存在文件,容器内不存在该文件:
1
2
3
4
5
6
7
8
9
|
# 本地目录存在 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
#
# 可以看到文件挂载成功。
|
情况4、宿主机存在文件夹挂载到容器不存在文件夹 。
接下来是宿主机存在文件夹,容器不存在该文件夹,宿主机的 test 文件夹里面存在一个 hello 文件:
1
2
3
4
5
6
7
8
9
10
|
$ 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
#
|
上面两个例子说明了,容器内部如果不存在文件,宿主机直接挂载.
情况5、宿主机文件夹挂载到容器文件 。
接下来假设宿主机存在 test 文件夹,而容器内部存在的是名为 test 文件,这样挂载会怎样呢?
1
2
3
|
$ 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"
.
|
上面的情况不出意外是启动错误.
情况6、同名文件夹挂载 。
那么假设宿主机是文件夹,容器也是文件夹,两个文件夹里面内容不一样,宿主机内部有一个 hello 文件,容器的文件夹里面有一个 index.php :
1
2
3
4
5
6
|
$ docker run --name=
test
-
v
~
/srv
:
/srv
-d volume_test
3aec30122bd7010c694e0ff8b77f7b7b6bb6f850c258786db125313060fad43b$ docker
exec
-it
test
sh
/srv
# ls
hello
/srv
#
# 可以看到,宿主机文件夹会覆盖容器内部的文件夹。
|
情况7、同名文件挂载 。
假设宿主机有一个 test.txt 文件,里面写着 Hello World,而容器里面也存在一个 test.txt 文件,里面写着 Hi World,现在挂载文件:
1
2
3
4
5
6
7
|
$ 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
#
# 宿主机会覆盖容器的文件。
|
情况8、宿主机文件挂载到容器文件夹 。
最后一种情况,宿主机存在文件 test.txt,而容器内部存在一个 test 的文件夹,现在把 文件挂载到文件夹中:
1
2
3
4
|
$ 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 | 启动错误 |
。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.
原文链接:http://www.jianshu.com/p/e605de64e9f9 。
最后此篇关于浅谈Docker 容器数据卷挂载小结的文章就讲到这里了,如果你想了解更多关于浅谈Docker 容器数据卷挂载小结的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
目录 前言 style-loader css-loader sass-loader postcss-loader babel-l
目录 1、简单动态字符串(SDS) 2、链表 3、字典 哈希表 哈希表节点 字典 4、跳跃表
JS运行三部曲 js运行代码共分三步 语法分析 预编译 解释执行 JavaScript代码在运行时,首先会进行语法分析,通篇检查代码是否存在低级错误,然后进行预编译,整理内
目录 +拼接方式 sprintf函数 Join函数 buffer.Builderbuffer.WriteString函数 buffer.B
下面整理下python有哪些方式可以读取数据文件。 1. python内置方法(read、readline、readlines) read() : 一次性读取整个文件内容。推荐使用re
背景 项目中的流程监控,有几种节点,需要监控每一个节点是否超时。按传统的做法,肯定是通过定时任务,去扫描然后判断,但是定时任务有缺点:1,数据量大会慢;2,时间不好控制,太短,怕一
目录 1. 提炼函数 2. 合并重复的条件片段 3. 把条件分支语句提炼成函数 4. 合理使用循环 5. 提前让函数退出代替嵌套条件分支
开始之前,pandas中dataframe删除对象可能存在几种情况 1、删除具体列 2、删除具体行 3、删除包含某些数值的行或者列 4、删除包含某些字符、文字的行或者列 本文就针对这四种情况探讨
setData setData 是小程序开发中使用最频繁的接口,也是最容易引发性能问题的接口。在介绍常见的错误用法前,先简单介绍一下 setData 背后的工作原理。 工作原理 小程序的视图层
下面是五种实现斐波那契数列的方法 循环 ? 1
一,分析代码运行时间 第1式,测算代码运行时间 平凡方法 快捷方法(jupyter环境) 第2式,测算代码多次运行平均时间 平凡方法 快捷方法(jupyter环境) 第
python之成为图像处理任务的最佳选择,是因为这一科学编程语言日益普及,并且其自身免费提供许多最先进的图像处理工具。本文主要介绍了一些简单易懂最常用的python图像处理库。 当今世界充满了各种
流式布局 采用流式布局会将元素按从左到右的顺序排列,如果一个元素在一行中放不下,那这个元素会另起一行依然按照从左到右的顺序排列 示例: 代码 public class Tes
@PropertySource 作用是:对自定义的properties文件加载 使用:@PropertySource(value={"classpath:people.properti
实现消息队列的两种方式 apache activemq官方实例发送消息 直接在apache官网http://activemq.apache.org/download-archives.html下
常用配置 以下配置能使用File -> New Projects Settings -> Settings for New Projects进行配置的尽量用这个配置,因为这个配置是作用
摘要: 开发者开发部署web应用时通常使用tomcat服务器,很多初学者只懂得在开发工具上配置,但离开了开发工具,自己手动配置部署,并让一个项目跑起来,你会了吗。小编也遇到过这样的困扰。网上查找的
1. 字符串的翻转 利用切片 ? 1
cookie和session在java web开发中扮演了十分重要的作用,本篇文章对其中的重要知识点做一些探究和总结。 1.cookie存在于浏览器 随意打开一个网址,用火狐的调试工具,随意选取
1、使用内置的tomcat,通过java -jar的方式启动 比如:java -jar bms.jar 但是这种启动方式 一旦关闭控制台 或者crtl+c 退出 此时应用就关闭了
我是一名优秀的程序员,十分优秀!