我们知道在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和宿主机操作系统文件目录互相隔离的实现原理相关推荐

  1. docker 导致宿主机重启的解决方法

    宿主机操作系统为centos 7.4 在k8s运行一段时间报错: containerd: time="2019-12-19T21:50:49.070815105Z" level=i ...

  2. 记录一次docker导致宿主机重启故障解决方法

    记录一次docker导致宿主机重启故障解决方法 参考文章: (1)记录一次docker导致宿主机重启故障解决方法 (2)https://www.cnblogs.com/caidingyu/p/1215 ...

  3. docker与宿主机共享内存通信

    docker与宿主机共享内存通信 docker中的进程要与宿主机使用共享内存通信,需要在启动容器的时候指定"–ipc=host"选项.然后再编写相应的共享内存的程序,一个跑在宿主机 ...

  4. docker导致宿主机重启和Cgroup 驱动程序有关

    现象 某个宿主机突然登录不上了,重启后查看系统日志/var/log/messages和下面的日志类似 Jan 5 15:50:01 hanginx01 systemd: Started Session ...

  5. docker 连接宿主机的 MySQL

    docker 连接宿主机的 MySQL 本文地址:https://blog.lucien.ink/archives/505 在实际生产过程中,docker 内的服务有时需要连接宿主机的 MySQL,在 ...

  6. mac for docker访问宿主机服务

    pod访问mac主机网络 Docker For Mac的Docker Daemon是运行于虚拟机(xhyve)中的, 而不是像Linux上那样作为进程运行于宿主机,因此Docker For Mac没有 ...

  7. docker使用宿主机代理

    docker run -it --network=host --name="Host-Proxy-Test" ubuntu:16.04export ALL_PROXY='socks ...

  8. docker需要linux内核版本,docker与宿主机内核版本

    1. 楼主的问题1我也产生过,虽然问法不一样,起初我也是想,如果就是运行在centos的服务器上,是否还需要FROM cetnos.但是既然所有书上一开始都说了要pull centos(ubuntu) ...

  9. 【docker】宿主机安装kafka docker容器内clickhouse无法连接

    1. 概述 本地搭建了一套clickhouse连接kafka的环境,然后发现无法连接到kafka,环境如下 本机kafka 已启动docker ck 无法连接宿主机 9092 docker内部teln ...

最新文章

  1. controller不跳转页面的几个原因_光知道SpringBoot,不用thymeleaf就太不对了
  2. Mono源代码学习笔记:Console类(四)
  3. “作为字节跳动面试官,有些话我不得不说!”
  4. 请在请求中携带deviceid参数_实战SpringCloud通用请求字段拦截处理
  5. 什么?这个机房没人了?
  6. 《Java程序设计》第五周学习总结
  7. cocos2dx 3.0打包android遇到的错误(持续更新)
  8. 实例63:python
  9. SCOPE_IDENTITY和@@identity的区别
  10. redis基本类型和使用
  11. 强化学习《基于价值 - Double Q-Learning》
  12. office 打开wps乱_wps打开word的乱码咋办?
  13. 关于python的英文参考文献_参考文献英文版
  14. 软件c#语言调用摄像头,C#中如何使用AForge实现摄像头录像功能
  15. oss图片无法在网站中显示
  16. git add所有文件
  17. print的常用写法(python)
  18. linux oracle lsnrctl start,linux 下lsnrctl start问题
  19. 加州欧文计算机工程专业,加州大学欧文分校计算机工程排名第29(2020年TFE美国排名)...
  20. VS Code如何设置背景色

热门文章

  1. 《python 源码剖析》 读后总结(虚拟机综述)
  2. web服务器 http请求返回 不同返回码的 对应 语意
  3. 分类素材(part5)--大话Python机器学习(中)
  4. Django(part21)--models字段
  5. R语言与数据的图表展示(part1)--不知道起啥名,反正就是初步认识一下
  6. Angular 如何根据一个 class 的定义和数据,动态创建一个该类的实例
  7. 一个中年程序员遇到突发情况的一些胡言乱语
  8. SAP C4C里嵌入SAP Analytics Cloud的案例
  9. How is SAP CDS metadata retrieved from AG3 backend
  10. 在SAP WebIDE Database Explorer里操作hdi实例