Docker和宿主机操作系统文件目录互相隔离的实现原理
我们知道在Docker容器里是无法访问到宿主操作系统的文件目录的,但这种隔离是怎么实现的呢?
其实一点也不神奇——利用了Linux系统的内部命令chroot。
chroot能将进程的根目录设置成任意指定的目录。
使用chroot我们能创建一个新的进程,并且以chroot执行时传入的参数作为新进程的根目录。
因为新进程创建之后就无法访问除了新进程创建时传入chroot参数之外的其他文件目录,为了确保这个新进程能够正常工作,我们必须手动拷贝一些文件到新进程的根目录映射的旧目录下。
做一个如下测试:
新建一个文件夹,执行chroot . 意思是把文件夹$HOME/container当作新建进程的根目录。但是没有成功,报错误消息chroot: failed to run command ‘/bin/bash’: No such file or directory
执行下面两条命令:
执行命令ldd $HOME/container/bin/bash:
该命令为了查看需要有哪些库文件得手动拷贝到文件夹$/HOME/container/bin/bash下面:
根据ldd的输出,再次执行下图的八条命令:
再次执行chroot . , 发现这次成功了:
pwd发现是在根目录下,ls也只能发现执行chroot时指定的container目录下的子目录:
这就是docker文件目录隔离的实现原理。
要获取更多Jerry的原创文章,请关注公众号"汪子熙":
Docker和宿主机操作系统文件目录互相隔离的实现原理相关推荐
- docker 导致宿主机重启的解决方法
宿主机操作系统为centos 7.4 在k8s运行一段时间报错: containerd: time="2019-12-19T21:50:49.070815105Z" level=i ...
- 记录一次docker导致宿主机重启故障解决方法
记录一次docker导致宿主机重启故障解决方法 参考文章: (1)记录一次docker导致宿主机重启故障解决方法 (2)https://www.cnblogs.com/caidingyu/p/1215 ...
- docker与宿主机共享内存通信
docker与宿主机共享内存通信 docker中的进程要与宿主机使用共享内存通信,需要在启动容器的时候指定"–ipc=host"选项.然后再编写相应的共享内存的程序,一个跑在宿主机 ...
- docker导致宿主机重启和Cgroup 驱动程序有关
现象 某个宿主机突然登录不上了,重启后查看系统日志/var/log/messages和下面的日志类似 Jan 5 15:50:01 hanginx01 systemd: Started Session ...
- docker 连接宿主机的 MySQL
docker 连接宿主机的 MySQL 本文地址:https://blog.lucien.ink/archives/505 在实际生产过程中,docker 内的服务有时需要连接宿主机的 MySQL,在 ...
- mac for docker访问宿主机服务
pod访问mac主机网络 Docker For Mac的Docker Daemon是运行于虚拟机(xhyve)中的, 而不是像Linux上那样作为进程运行于宿主机,因此Docker For Mac没有 ...
- docker使用宿主机代理
docker run -it --network=host --name="Host-Proxy-Test" ubuntu:16.04export ALL_PROXY='socks ...
- docker需要linux内核版本,docker与宿主机内核版本
1. 楼主的问题1我也产生过,虽然问法不一样,起初我也是想,如果就是运行在centos的服务器上,是否还需要FROM cetnos.但是既然所有书上一开始都说了要pull centos(ubuntu) ...
- 【docker】宿主机安装kafka docker容器内clickhouse无法连接
1. 概述 本地搭建了一套clickhouse连接kafka的环境,然后发现无法连接到kafka,环境如下 本机kafka 已启动docker ck 无法连接宿主机 9092 docker内部teln ...
最新文章
- controller不跳转页面的几个原因_光知道SpringBoot,不用thymeleaf就太不对了
- Mono源代码学习笔记:Console类(四)
- “作为字节跳动面试官,有些话我不得不说!”
- 请在请求中携带deviceid参数_实战SpringCloud通用请求字段拦截处理
- 什么?这个机房没人了?
- 《Java程序设计》第五周学习总结
- cocos2dx 3.0打包android遇到的错误(持续更新)
- 实例63:python
- SCOPE_IDENTITY和@@identity的区别
- redis基本类型和使用
- 强化学习《基于价值 - Double Q-Learning》
- office 打开wps乱_wps打开word的乱码咋办?
- 关于python的英文参考文献_参考文献英文版
- 软件c#语言调用摄像头,C#中如何使用AForge实现摄像头录像功能
- oss图片无法在网站中显示
- git add所有文件
- print的常用写法(python)
- linux oracle lsnrctl start,linux 下lsnrctl start问题
- 加州欧文计算机工程专业,加州大学欧文分校计算机工程排名第29(2020年TFE美国排名)...
- VS Code如何设置背景色
热门文章
- 《python 源码剖析》 读后总结(虚拟机综述)
- web服务器 http请求返回 不同返回码的 对应 语意
- 分类素材(part5)--大话Python机器学习(中)
- Django(part21)--models字段
- R语言与数据的图表展示(part1)--不知道起啥名,反正就是初步认识一下
- Angular 如何根据一个 class 的定义和数据,动态创建一个该类的实例
- 一个中年程序员遇到突发情况的一些胡言乱语
- SAP C4C里嵌入SAP Analytics Cloud的案例
- How is SAP CDS metadata retrieved from AG3 backend
- 在SAP WebIDE Database Explorer里操作hdi实例