容器数据卷

Docker 挂载主机目录访问出现 cannot open directory .: Permission denied

1、解决:在挂载目录后加 --privileged=true 参数即可

 2、原理

(1)CentOS 7 安全模块比之前系统版本加强,先禁止不安全行为,目录挂载的情况被默认为不安全行为

(2)在 SELinux 中挂载目录被禁止,如果要开启,一般使用 --privileged=true 命令,扩大容器的权限解决挂载目录没有权限的问题

(3)即使用该参数,container 内的 root 拥有真正的 root 权限,否则,container 内的 root 只是外部的一个普通用户权限

 

1、目录或文件,存在于一个或多个容器中

2、由 docker 挂载到容器,但不属于联合文件系统,因此能够绕过 Union File System,提供用于持续存储或共享数据的特性

3、设计目的

(1)数据的持久化,run 镜像生成容器,将 Docker 容器内数据备份到宿主机磁盘,容器删除后,仍能保存数据

(2)完全独立于容器的生存周期,因此 Docker 不会在删除容器时,删除其挂载的数据卷

(3)将运用与运行的环境打包镜像,run 后形成容器实例运行 ,但是我们对数据的要求希望是持久化的

4、特点

(1)数据卷可在容器之间共享或重用数据

(2)卷中的更改可以直接实时生效

(3)数据卷中的更改不会包含在镜像的更新中

(4)数据卷的生命周期一直持续到没有容器使用它为止

 

主机、容器之间映射添加卷

1、默认情况,仓库被创建在容器的 /var/lib/registry 目录下,建议使用容器卷映射,方便于宿主机联调

docker run -it --privileged=true -v /主机绝对路径目录:/容器绝对路径目录 镜像名称

2、查看数据卷是否挂在成功

docker inspect [OPTIONS] NAME|ID [NAME|ID...]

3、-v 将当前工作目录挂载到容器中

(1)-w 让命令在当前工作目录内执行,通过改变目录到由 pwd 返回的值

#使用容器执行命令,但在当前工作目录内
docker  run  -v `pwd`:`pwd` -w `pwd` -i -t  ubuntu pwd

(2)当绑定挂载的卷的主机目录不存在时,Docker 会自动在主机上创建这个目录

#Docker会在启动你的容器之前创建文件夹:/doesnt/exist
docker run -v /doesnt/exist:/foo -w /foo -i -t ubuntu bash

(3)卷可以与 --read-only 结合使用,以控制容器写入文件的位置,--read-only 将容器的根文件系统挂载为只读,禁止向容器的指定卷以外的地方写入文件

docker run --read-only -v /icanwrite busybox touch /icanwrite/here

(4)可以选择以 :ro 或 :rw 为后缀,:ro 限制主机只能读取容器,默认为 :rw

4、--volumes-from 从被引用的容器中挂载所有定义的卷,即创建新容器时,继承另一个容器的数据卷设置

docker run --volumes-from 777f7dc92da7 --volumes-from ba8c0c54f0f2:ro -i -t ubuntu pwd

(1)容器可以通过重复的 --volumes-from 参数来指定

(2)容器 ID 可以选择以 :ro 或 :rw 为后缀,分别以只读 / 读写的模式挂载卷,默认情况下,卷是以与参考容器相同的模式(读写 / 只读)挂载的

(3)像 SELinux 这样的标签系统要求在挂载到容器中的卷内容上放置适当的标签,如果没有标签,安全系统可能会阻止在容器内运行的进程使用这些内容,默认情况下,Docker不会改变操作系统设置的标签

(4)要改变容器上下文中的标签,可以在卷的挂载中添加两个后缀 :z 或 :Z 中的一个,这些后缀告诉 Docker 要重新标记共享卷上的文件对象

(5):z 选项告诉 Docker,两个容器共享卷的内容,因此,Docker 给内容贴上了共享内容的标签,共享卷的标签允许所有容器读 / 写内容

(6):Z 选项告诉 Docker 给内容贴上一个私有的非共享标签,只有当前的容器可以使用一个私有卷

posted @   半条咸鱼  阅读(28)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器
点击右上角即可分享
微信分享提示