逆向解析Docker镜像(image)中的Dockerfile的通用方法

当官方镜像存在问题时,通过dockerhistory命令逆向Dockerfile并不完全有效,尤其是COPY/ADD指令导致的问题。本文介绍了如何详细解析COPY/ADD指令中的文件,包括获取最高层imageID、计算layerID、解析tar-split.json.gz等步骤,以重建Dockerfile并重新制作镜像,从而彻底解决镜像问题。
摘要由CSDN通过智能技术生成

      当从官网上下载下来的镜像有问题时,我们通常是无法去修改镜像的,一般也就通过启动容器,再次覆盖去修改问题,但对于有些比较大的问题,比方镜像的系统版本太老,通过commit容器的方式去修改镜像,就有些力不从心了,这时,如果可以把镜像的Dockerfile逆向出来,自己重做镜像,那就可以彻底解决问题。

          逆向Dockerfile,我们能想到的方式就是通过docker history 命令来做,但是docker history逆向出来的命令有个问题,对于COPY/ADD指令,我们不清楚当时拷贝了什么文件进入到镜像中,经过研究,可以用下面的思路来实现:

    

解析COPY/ADD指令中的文件整体思路(每个COPY/ADD都会产生一个layer):

1.通过镜像名获取最高层的imageID  (docker image inspect  imagId)

2.通过最高层ImageID算出各个layer的layerID (参考镜像的标准,GitHub上有)

3.通过ImageID于其父层关联,得到其命令,并与步骤2的layerID顺序绑定

4.解析tar-split.json.gz中的json得到每条指令对应的文件 (通过zcat解析)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值