容器挂载数据卷的几种情况

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 挂载宿主机存在的【文件】到容器不存在的【文件】`宿主机存在文件:rainbow`$ cat rainbow This is my rainbow`运行容器`$ docker run -d -v $PWD/rainbow:$HOME/ra...
  • 挂载宿主机存在的【文件】到容器不存在的【文件】
`宿主机存在文件: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会自动在宿主机和容器内新建此目录
目录不存在 文件存在 容器启动失败
目录不存在 目录存在 挂载成功,容器内目录内容被覆盖(空)
相关文章
|
3月前
|
存储 索引 Python
Python基础第五篇(Python数据容器)
Python基础第五篇(Python数据容器)
|
23天前
|
安全 网络安全 数据安全/隐私保护
云原生技术探索:容器化与微服务架构的实践之路网络安全与信息安全:保护数据的关键策略
【8月更文挑战第28天】本文将深入探讨云原生技术的核心概念,包括容器化和微服务架构。我们将通过实际案例和代码示例,展示如何在云平台上实现高效的应用部署和管理。文章不仅提供理论知识,还包含实操指南,帮助开发者理解并应用这些前沿技术。 【8月更文挑战第28天】在数字化时代,网络安全和信息安全是保护个人和企业数据的前线防御。本文将探讨网络安全漏洞的成因、加密技术的应用以及提升安全意识的重要性。文章旨在通过分析网络安全的薄弱环节,介绍如何利用加密技术和提高用户警觉性来构建更为坚固的数据保护屏障。
|
1月前
|
存储 Docker 容器
在Docker中,容器退出后,通过docker ps命令查看不到,数据会丢失么?
在Docker中,容器退出后,通过docker ps命令查看不到,数据会丢失么?
|
2月前
|
Shell Linux Docker
docker常用命令大全(基础、镜像、容器、数据卷)
这些命令仅仅是 Docker 命令行工具的冰山一角,但对于日常操作来说已经非常全面。通过熟练地使用这些基础命令,用户可以有效地管理 Docker 的镜像、容器、数据卷和网络。随着用户对 Docker 的深入使用,更高级的命令和选项将会变得必需,但上面列出的命令已经为用户提供了一个坚实的起点。对于初学者来说,理解和掌握这些常用命令是深入学习 Docker 的基础。
264 5
docker常用命令大全(基础、镜像、容器、数据卷)
|
19天前
|
监控 安全 网络安全
|
2月前
|
关系型数据库 分布式数据库 PolarDB
PolarDB产品使用问题之如何将PolarDB容器内的目录挂载到宿主机的指定目录
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
28天前
|
域名解析 Kubernetes 负载均衡
在K8S中,外部访问容器服务,比如说提供了一个域名,链路怎么走?数据经过哪些组件?
在K8S中,外部访问容器服务,比如说提供了一个域名,链路怎么走?数据经过哪些组件?
|
2月前
|
存储 C++ 容器
开发与运维数组问题之C++标准库中提供数据容器作为数组的替代如何解决
开发与运维数组问题之C++标准库中提供数据容器作为数组的替代如何解决
43 5
|
2月前
|
存储 JavaScript 容器
TS,添加注释,//,ctrl + /,shift + alt + a,输出语句,console.log(“Hello Ts‘),变量和数据类型导读,变量就是用来存储数据的容器,变量的使用,TS
TS,添加注释,//,ctrl + /,shift + alt + a,输出语句,console.log(“Hello Ts‘),变量和数据类型导读,变量就是用来存储数据的容器,变量的使用,TS
|
2月前
|
存储 语音技术 Python
语音识别,函数综合案例,黑马ATM,/t/t一个对不齐,用两个/t,数据容器入门,数据容器可以分为列表(list)、元组(tuple)、字符串(str)、集合(set)、字典(dict)
语音识别,函数综合案例,黑马ATM,/t/t一个对不齐,用两个/t,数据容器入门,数据容器可以分为列表(list)、元组(tuple)、字符串(str)、集合(set)、字典(dict)