容器挂载数据卷的几种情况
- 挂载宿主机存在的【文件】到容器不存在的【文件】
`宿主机存在文件:rainbow` $ cat rainbow This is my rainbow `运行容器` $ docker run -d -v $PWD/rainbow:$HOME/rainbow --name test_1 alpine tail -f /dev/null 38f19e99a0e00e67a605adc6e6b0b8d039bc78a49cb2491871ccf6fb761f564e `容器内查看文件,挂载成功` $ docker exec -it test_1 cat ~/rainbow This is my rainbow
- 挂载宿主机存在的【文件】到容器存在的【文件】
`挂载本地环境变量到容器` $ docker run -d -v /etc/profile:/etc/profile --name test_2 alpine tail -f /dev/null x569cae718223b1d1f506c2d7a597d1a1b7fb13dceadab379bf4065d89ba9605846 `挂载成功,容器内的文件内容会被覆盖!` $ docker exec -it test_2 cat ~/rainbow ...
- 挂载宿主机不存在的【目录】到容器存在的【文件】
`容器启动失败` $ docker run -d --name test_3 -v ~/test:/etc/apk/repositories alpine tail -f /dev/null 72b75e729dec991671daf54e4ed0985ba3c8fc93866066628446a697b64e2967 /usr/bin/docker-current: Error response from daemon: oci runtime error: container_linux.go:247: starting container process caused "process_linux.go:364: container init caused \"rootfs_linux.go:54: mounting \\\"/root/test\\\" to rootfs \\\"/var/lib/docker/overlay2/b989ba9605846a51027922c5656fb809c173b0617abcc0bb66 f8487ecbb22965/merged\\\" at \\\"/var/lib/docker/overlay2/b989ba9605846a51027922c5656fb809c173b0617abcc0bb66f8487ecbb22965/merged/etc/apk/repositories\\\" caused \\\"not a directory\\\"\"" : Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type.
- 挂载宿主机存在的【目录】到容器不存在的【目录】
`挂载本地jenkins_home目录到容器` $ docker run -d --name test_4 -v /opt/jenkins_home:/var/jenkins_home alpine tail -f /dev/null f709cae718223b1d1f506c2d7a597d1a1b7fb13dceadab379bf4065d982b462f `挂载成功,容器内会自动新建此目录` $ docker exec -it test_4 ls /var/jenkins_home config.xml copy_reference_file.log hudson.model.UpdateCenter.xml hudson.plugins.git.GitTool.xml identity.key.enc init.groovy.d ...
- 挂载宿主机存在的【目录】到容器存在的【目录】
$ docker run -d --name test_5 -v /etc/cron.d:/etc/apk/ alpine tail -f /dev/null b2c132e2f6cc3b7c726f6bfef9779543a8b031348cc2ba592353babacf781436 $ ls /etc/cron.d 0hourly `挂载成功,容器内目录原内容被覆盖` $ docker exec -it test_5 ls /etc/apk 0hourly
- 挂载宿主机不存在的【目录】到容器不存在的【目录】
$ docker run -d --name test_6 -v ~/temp:/etc/temp alpine tail -f /dev/null bd5c70a0f341ac1d4c6f6061ccb97c147e4ef9852835c4368aecc03d47c92572 `挂载成功,docker会自动在宿主机和容器内新建此目录` $ docker exec -it test_6 ls /etc/temp $
- 挂载宿主机不存在的【目录】到容器存在的【目录】
$ docker run -d --name test_7 -v ~/test/:/etc/apk/ alpine tail -f /dev/null a19443399641e3461155afe1b5bc410f913dc4ecfe2eb50b9bc652a48307b715 `挂载成功,容器内目录内容被覆盖(空)` $ docker exec -it test_7 ls /etc/apk $
- 挂载宿主机存在的【文件】到容器存在的【目录】
`容器启动失败` $ docker run -d --name test_8 -v /etc/profile:/etc/apk/ alpine tail -f /dev/null 2dda82d7d7312f132aa6930fe919375685dc2904e0ecad312e28d1274c9add4b /usr/bin/docker-current: Error response from daemon: oci runtime error: container_linux.go:247: starting container process caused "process_linux.go:364: container init caused \"rootfs_linux.go:54: mounting \\\"/etc/profile\\\" to rootfs \\\"/var/lib/docker/overlay2/9205ea29badfcf3f49ffa1058797ce31ac6e750fbc1bd6a09598737958b5d478/merged\\\" at \\\"/var/lib/docker/overlay2/9205ea29badfcf3f49ffa1058797ce31ac6e750fbc1bd6a09598737958b5d478/merged/etc/apk\\\" caused \\\"not a directory\\\"\"" : Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type.
- 挂载宿主机存在的【目录】到容器存在的【文件】
`容器启动失败` $ docker run -d --name test_10 -v ~/case/:/etc/apk/repositories alpine tail -f /dev/null 908c7bb8e387233733415a5da430526c5ddbe67775885d11014b607a31d07849 /usr/bin/docker-current: Error response from daemon: oci runtime error: container_linux.go:247: starting container process caused "process_linux.go:364: container init caused \"rootfs_linux.go:54: mounting \\\"/root/case\\\" to rootfs \\\"/var/lib/docker/overlay2/073f27fd5fe62ba821f178e2a5ac0137c197c16f9d5f5a73ce4e617eb80a3516/merged\\\" at \\\"/var/lib/docker/overlay2/073f27fd5fe62ba821f178e2a5ac0137c197c16f9d5f5a73ce4e617eb80a3516/merged/etc/apk/repositories\\\" caused \\\"not a directory\\\"\"" : Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type.
总结
宿主机 | 容器 | 运行结果 |
---|---|---|
文件存在 | 文件不存在 | 挂载成功 |
目录存在 | 目录不存在 | 挂载成功 |
------ | ------ | ------ |
文件存在 | 文件存在 | 挂载成功,容器内的文件内容被覆盖 |
目录存在 | 目录存在 | 挂载成功,容器内目录内容被覆盖 |
------ | ------ | ------ |
文件存在 | 目录存在 | 容器启动失败 |
目录存在 | 文件存在 | 容器启动失败 |
------ | ------ | ------ |
目录不存在 | 目录不存在 | 挂载成功,docker会自动在宿主机和容器内新建此目录 |
目录不存在 | 文件存在 | 容器启动失败 |
目录不存在 | 目录存在 | 挂载成功,容器内目录内容被覆盖(空) |
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
编写可维护的JavaScript
软件生命周期中80%的成本都消耗在了维护上;而且几乎所有的维护者都不是代码的直接开发人。如何让自己写的代码让别人阅读起来更高效?当然是写代码的时候注入一些规范。那么在Javascript中有哪些编程风格值得我们去注重呢?这篇文章将总结《编写可维护的JavaScript》里面的观点。 缩进风格 上图是Stack Overflow的调查,可见,大部分的Programmer都喜欢用tab进行缩进。每行缩进由4个空格组成。 语句结尾 建议不要省略分号。很多人喜欢写js代码很依赖于自动分号插入,也就是语句后面不加分号。但是这是大多数的情况,像return这样的语句是会出错的。类似的还有其他一些语法,这里就不细说自动分号插入机制了,感兴趣的童鞋可以前往JavaScript ASI 机制详解。 行的长度 这个之前在另外一篇博客中有介绍过,为了保证在小屏笔记本和大屏幕上看到的代码是一致的,通常建议每一行代码不要超过80列。 换行 代码长度超过80列,换行也是有讲究的。建议换行的代码增加两个缩进长度。例如: callFunction(element1, element2, element3, eleme...
- 下一篇
Gauva的安装——入门篇
Guava工程包含了若干被Google的 Java项目广泛依赖 的核心库,例如:集合 [collections] 、缓存 [caching] 、原生类型支持 [primitives support] 、并发库 [concurrency libraries] 、通用注解 [common annotations] 、字符串处理 [string processing] 、I/O 等等。 guava类似Apache Commons工具集 一、guava的安装 1.下载guava的最新的版本,网址:https://github.com/google/guava/wiki/Release19 (ps:jar,javadoc,sources都下载下来,后面都要用到) 2.打开eclipse,在java项目右键-->Build Path-->Add External Archievs 3.选择刚才下载好的jar包(jar包其实就是一个压缩文件夹,可以解压出来的) 二、guava源代码的下载 1.还是刚刚下载guava的页面,这一次下载的是源代码 2.把源代码添加到eclipse,方便...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- MySQL8.0.19开启GTID主从同步CentOS8
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Windows10,CentOS7,CentOS8安装Nodejs环境
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Docker安装Oracle12C,快速搭建Oracle学习环境
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS7设置SWAP分区,小内存服务器的救世主