01-docker原理-05-overlay2目录_rename /data/docker/image/overlay2/layerdb/tmp/wri_开发运维玄德公的博客-程序员秘密

技术标签: overlay2  linux  # 01-docker基础  存储目录属于哪个容器  docker  查看指定容器的存储目录  

前言:
本章分析 docker 的 overlay2 目录
docker的整体目录的分析见《docker的目录》一文

1. “l”目录

  • 目录位置
    overlay2目录下有有一个“l”目录
  • 内容
    里边有一些软连接指向 /overlay2/CacheID 目录下的 diff目录。
[[email protected] l]# ll
total 444
lrwxrwxrwx 1 root root 72 Jan 21 08:48 2GJHC55KDLLSH725ATMROHMQHW -> ../3ef5f9868d2f72e7dcd3ff1047176d2c9f78ef06342552896badb97876427ba8/diff
lrwxrwxrwx 1 root root 72 Jan 21 08:49 2Q4QW2CEWO47MDMGSDORECFGI2 -> ../99153898c52a78f3b7bbd4ed06c32b32facb00e471496ce55324dcae95442dff/diff
lrwxrwxrwx 1 root root 72 Jan 21 08:49 2QWP34GCA3MW5YPGZJDB4U36VO -> ../9668210804fd9774d6be658253bb36afcf80808140da91fc6f07315984aa25e3/diff
lrwxrwxrwx 1 root root 72 Jan 21 08:48 3V4AGOIEAL5XGQIGO66Y5UPHY3 -> ../8cf959aa82bf88454d10c467f3e33a897d19ab6a9ab7d0f3b6d669f1315ca56e/diff
  • 作用
    这是为了避免挂载命令超出长度。

2. CacheID目录作用

overlay2目录下还有很多已CacheID为目录名的目录,这些目录存储的是镜像和容器各层的实际内容。

[[email protected] overlay2]# ll
total 432
drwx------ 4 root root 4096 Oct 29  2019 012de5e5bdb0562b4b60c50d235c9eb9fe17a9a5592ec3fbd9231dedf38afb2d
drwx------ 4 root root 4096 Jan 21 08:48 03468b1e67108a1a2acade9b1f05e2e6fa5b5d282e9526af8628a48104102940
drwx------ 4 root root 4096 Jan 21 08:49 0387aa8919e5fa943132c89ae93574807c77b15aa0cd7514a1f29c9287a87a5d
drwx------ 5 root root 4096 Feb  2 10:45 08b19b890cc0348eabca15b585820d91bd59d88e3fdd5c2f589fe5e69ecb5cfa
drwx------ 4 root root 4096 Jan 21 09:41 08b19b890cc0348eabca15b585820d91bd59d88e3fdd5c2f589fe5e69ecb5cfa-init
......

2.1 容器上层存储目录

其中带 -init的目录和跟它同名但不带-init的目录是容器上层的目录。如上例中:

drwx------ 5 root root 4096 Feb  2 10:45 08b19b890cc0348eabca15b585820d91bd59d88e3fdd5c2f589fe5e69ecb5cfa
drwx------ 4 root root 4096 Jan 21 09:41 08b19b890cc0348eabca15b585820d91bd59d88e3fdd5c2f589fe5e69ecb5cfa-init
  • 带init的目录
    这个目录对容器是只读的

  • 没有init的容器目录
    容器的读写目录,容器中写入时候会把文件拷贝进来(读操作直接在每层操作,不需拷贝)

演示:
比如我进入容器,在home下写一个hello.txt的文件,于是宿主机该目录下的diff目录中多了一个 home目录,下边多了一个hello.txt文件。

生命周期:

  • 当容器创建时生成这些目录
  • 当容器删除时,目录删除

2.2 镜像层存储目录ing

  • 位置
    只有一个以CacheID命名的目录(即没有对应CacheID-init目录的)
  • 生命周期
    随镜像下载而创建,随镜像删除而删除

3. CacheID目录和容器的对应关系

3.1 查看存储目录属于哪个容器

  • overlay2下有如下目录
08b19b890cc0348eabca15b585820d91bd59d88e3fdd5c2f589fe5e69ecb5cfa
08b19b890cc0348eabca15b585820d91bd59d88e3fdd5c2f589fe5e69ecb5cfa-init
  • 查找属于那个容器
[[email protected] overlay2]# docker ps -q | xargs docker inspect --format '{
    {.State.Pid}}, {
    {.Id}}, {
    {.Name}}, {
    {.GraphDriver.Data.WorkDir}}' | grep "08b19b890cc0348eabca15b585820d91bd59d88e3fdd5c2f589fe5e69ecb5cfa"
3262, 6bf1cc99809501fe6c5133bbadd1a973b938425fd87a5ff98e3f4ab7d570589a, /das-db, /var/lib/docker/overlay2/08b19b890cc0348eabca15b585820d91bd59d88e3fdd5c2f589fe5e69ecb5cfa/work

说明:
如上可见,该存储对应 的容器名为 das-db

3.2 查看指定容器的存储目录

其实就是2.2反向查,测试如下

[[email protected] overlay2]# docker ps -q | xargs docker inspect --format '{
    {.State.Pid}}, {
    {.Id}}, {
    {.Name}}, {
    {.GraphDriver.Data.WorkDir}}' | grep  gateway
134626, bf6c6433bd2ed870daad08fd667ece93db2f8c5e05da786d0ca9838a2bcf72d4, /k8s_filebeat_gateway-854ff898c5-t7j49_crust-framework_d6e24bdc-8632-4691-b2ef-c112efdb6784_0, /data/docker/overlay2/72df0bfe3f322eeff69f43394e9bde50a786103f278c00a1dd8bde457889e077/work
134565, d278f3488213a2396dda0a781dc5ea5d512ea11675ee30a0521817ad8a5a4b1e, /k8s_gateway_gateway-854ff898c5-t7j49_crust-framework_d6e24bdc-8632-4691-b2ef-c112efdb6784_0, /data/docker/overlay2/9e31372295296a2d83bd725214063f60114499582be4027e13c78b241e1cf16c/work
134439, a16364fc28a7c67e35d1d2c0c73fdc18b5705dfe1b21d3c79a0a99618594a88a, /k8s_POD_gateway-854ff898c5-t7j49_crust-framework_d6e24bdc-8632-4691-b2ef-c112efdb6784_0, /data/docker/overlay2/0e362acb07459c9fd97f5b1bbe2431a33daf19e091da78c8abed459985fdff69/work
28798, 1ce006e2a0ac90d7dc838d52d9b5865bc76e75a40f79bd4839ef818e46730197, /k8s_gateway_etcd-75d4485689-j4g2z_streaming_373adf06-d4b8-4aa7-a161-ba8424a0eefe_0, /data/docker/overlay2/80385eb061acce97c369fe1577775e8230ce7108cf0ac01dce0346e1622fad94/work

说明:如上可见,查看 gataway 这个pod的目录,得到四条信息:

  • 第一条是该pod里 filebeat的容器信息
  • 第二条是该pod里gateway的容器,我们要找的是这个
  • 第三条是该pod里pause的容器
  • 第四条是k8s系统的,和该pod无关。
    综上:我们要找的目录是/data/docker/overlay2/9e31372295296a2d83bd725214063f60114499582be4027e13c78b241e1cf16c

4. CacheID目录结构

[[email protected] ffd866bd6ece4908f3edd84da09df8f470680276c4acc6752066de8d359e972c]# ll
total 16
-rw------- 1 root root    0 Jan 21 08:49 committed
drwxr-xr-x 3 root root 4096 Jan 21 08:49 diff
-rw-r--r-- 1 root root   26 Jan 21 08:49 link
-rw-r--r-- 1 root root   86 Jan 21 08:49 lower
drwx------ 2 root root 4096 Jan 21 08:49 work
  • diff 目录
    文件目录,各层的目录都会放在下边
[[email protected] 08b19b890cc0348eabca15b585820d91bd59d88e3fdd5c2f589fe5e69ecb5cfa]# ll diff/
total 20
drwxr-xr-x 2 root root 4096 Feb  2 14:06 home
drwx------ 2 root root 4096 Feb  2 13:40 root
drwxr-xr-x 3 root root 4096 Jan 28  2019 run
drwxrwxrwt 2 root root 4096 Feb  2 13:40 tmp
  • link 文件
    写明该存储对应的镜像层
[[email protected] ffd866bd6ece4908f3edd84da09df8f470680276c4acc6752066de8d359e972c]# cat link
RMGBSAZLRQKZLACS72PTSJPS62
  • lower 文件
    指名该镜像层对应的底层镜像层
[[email protected] ffd866bd6ece4908f3edd84da09df8f470680276c4acc6752066de8d359e972c]# cat lower
l/OSSHOMMOPKF74F3MR2JHEA33MG:l/2Q4QW2CEWO47MDMGSDORECFGI2:l/IUFHPX4Z3A74KHLPEYAMGPM5DI
  • work 目录
    文件系统的工作基础目录,挂载后内容会被清空,且在使用过程中其内容用户不可见

【FAQ】

1)overlay2 不支持NFS挂载

【问题】

/var/lib/docker 目录移动到NFS挂载的目录之后,docker启动不起来

【查看】

查看报错日志如下

[[email protected] data]# journalctl -xe
……
7月 06 11:49:50 crust-m02 dockerd[10652]: time="2021-07-06T11:49:50.475328532+08:00" level=error msg="'overlay2' is not supported over nfs" storage-driver=overlay2
7月 06 11:49:50 crust-m02 dockerd[10652]: time="2021-07-06T11:49:50.475349891+08:00" level=error msg="[graphdriver] prior storage driver overlay2 failed: backing file sys
……

2)镜像恢复

【问题】

客户现场docker启动不起来了,前台工程师需要提供快速解决的指导意见。

【分析】

  • 根据现场工程师发来截图,初步判断大概率是docker目录出现问题,无法远程,现场工程师说不清楚。
  • 镜像需要保留(客户内网无法下载新镜像)
  • 容器需要的数据持久化存储没有问题。

【解决】

  1. 停止docker服务,mv docker目录,重启docker

现场启动正常,说明之前错误定位是对的。

  1. 停止docker服务,用原来docker目录下image目录和overly2替换新生成的docker目录下的对应目录
  2. 替换后原容器上层对应的目录( 见"2.1 容器上层存储目录")建议删除,当然你不删也不会有问题。
  3. 重启docker服务
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/xingzuo_1840/article/details/120119181

智能推荐

关于换行LF与CRLF_码林几大年的博客-程序员秘密

一、LF和CRLF是什么CRLF 是 carriage return line feed 的缩写,中文意思是回车换行。LF 是 line feed 的缩写,中文意思也是换行。它们都是文本换行的方式。二、LF和CRLF区别CRLF: “\r\n”, windows系统环境下的换行方式LF: “\n”, Linux系统环境下的换行方式三、在webStrom下切换的位置...

Modelsim 仿真问题 “unisim” Does not exist_debug data file, vsim.dbg, does not exist._徐淑琴的博客-程序员秘密

copy别人的代码来modelsim来仿真,遇到这种问题把你copy过来的工程文件下的modelsim.ini换成你电脑modelsim下的modelsim.ini就可以解决。亲测有效 哈哈哈

ElasticSearch SQL转DSL_es sql转dsl_@航空母舰的博客-程序员秘密

前文Elasticsearch在较高版本中内置SQL查询的功能,猜想本质上应该是将SQL语句转化为原生的DSL语句,再使用原生进行查询,可以让不熟悉ES的用户能通过SQL语句快速查询结果,降低使用门槛减少学习成本。另外,ES也提供Java客户端以JDBC的方式连接查询,但该方式是收费的。所以,如果用户不想购买服务建议使用官方提供的免费的restful的方式去查询,例如Java REST Client。当不熟悉ES原生的DSL语句的时候,可以先使用SQL编写查询语句,然后再使用ES自带的请求将SQL语句翻

如何使用ThinkPHP3.2上传图片到七牛云_Holyzq的博客-程序员秘密

我们在做大型商城项目或者其他项目的时候,上传图片肯定是必不可少的,以前的项目都是把图片上传到本地,针对于图片量比较大的商城,很多企业要求把图片上传到第三方网站,比如七牛云等。这样可以大大加快网站的加载速度。那么,如何在ThinkPHP3.2框架中使用七牛云呢,接下来我们来分析详细操作步骤。一、首先进入七牛云官网 https://www.qiniu.com/ 注册账号,登录后进入 管理控制台--对...

实战SSM_O2O商铺_17【商铺编辑】Dao层开发_小小工匠的博客-程序员秘密

概述ShopDao接口ShopDao映射文件单元测试概述ShopDao接口com.artisan.o2o.dao.ShopDao.java 新增查询接口/** * * * @Title: selectShopById * * @Description: 根据shopId查询shop * ...

随便推点

STL学习小结_weixin_30788619的博客-程序员秘密

STL就是Standard Template Library,标准模板库。这可能是一个历史上最令人兴奋的工具的最无聊的术语。从根本上说,STL是一些“容器”的集合,这些“容器”有list, vector,set,map等,STL也是算法和其它一些组件的集合。这里的“容器”和算法的集合指的是世界上很多聪明人很多年的杰作。是C++标准库的一个重要组成部分,它由Stepanov and Lee等人最...

PhpStorm 快捷键大全 PhpStorm 常用快捷键和配置+如何关闭快捷键ctrl+alt+方向键旋转屏幕..._weixin_33805557的博客-程序员秘密

如果映射的是eclipse的快捷键,又同时安装了英特尔的GPU软件,那么会有这个快捷键冲突就是快速复制快捷键:ctrl+alt+方向键 会调用英特尔旋转屏幕,禁用掉即可PhPStorm 是 JetBrains 公司开发的一款商业的 PHP 集成开发工具,PhpStorm可随时帮助用户对其编码进行调整,运行单元测试或者提供可视化debug功能。Ph...

vue 拦截器,增加token参数_vue 请求拦截添加自定义参数_石意的博客-程序员秘密

1.使用请求拦截器,拦截vue所有请求,增加token参数 使用倒数计时,假如token有效期60分钟,会在59分钟的时候去重新拿着refresh_Token,去请求新的token. 注意:如果一个账号允许多人登录使用,上述方法没有问题,但是如果一个账号只允许一人登录,一个地点登录,那上述方法就不那么全面,这时候可以采用使用响应拦截器,拦截状态码进行对应的异常处理,然后判...

0x8(0x80070035找不到网络路径)_叶涛网站推广优化的博客-程序员秘密

c语言编程 main()  {unsignedchara,b,ca为16进制化为二进制为0011,b为0011|1000=1011=11,c为b左移一位为10110相当于b*2=22请教大家一个计算机2级的题目main(){unsignedcha"|"这个是按位或C没有初始化不能移位操作,安装程序...

微信小程序tabBar底部导航栏菜单详细介绍_微信小程序 底部菜单栏_奋斗年轻人的博客-程序员秘密

http://www.ablanxue.com/shtm手机网站|tabBar相对而言用的还是比较多的,但是用起来并没有难,在app.json中配置下tabBar即可,注意tabBar至少需要两个最多五个Item选项主要属性:tabBar相对而言用的还是比较多的,但是用起来并没有难,在app.json中配置下tabBar即可,注意tabBar至少

QQ公司的面试题_lvjt86的博客-程序员秘密

首页新闻论坛群组Blog文档下载读书Tag网摘搜索.NETJava游戏视频人才外包培训数据库书店程序员try { document.domain="csdn.net"; } catch (ex){};window._stopMouseOver=function(e){(wind