Docker Image 拆包去除已有的 VOLUME

本文共有2263个字,关键词:dockerdocker imagedocker volume

docker-image.png

我们在DockerFile里面,要继承一个已有的Docker Image,需要修改原来VOLUME里的内容。
通常的办法,修改VOLUME里面数据后,再保存VOLUME是无效的。
例如我们在/var/www/onlyoffice/Data中加入了一个web文件夹

mkdir /var/www/onlyoffice/Data/web
touch /var/www/onlyoffice/Data/web/test
VOLUME ["/var/www/onlyoffice/Data"]

然后启动容器发现/var/www/onlyoffice/Data中空空如也。

我们变通一下使用VOLUME ["/var/www/onlyoffice/Data/web"]

mkdir /var/www/onlyoffice/Data/web
touch /var/www/onlyoffice/Data/web/test
VOLUME ["/var/www/onlyoffice/Data/www"]

然后启动容器发现,/var/www/onlyoffice/Data/www存在,但是里面还是空的。

因为我们在挂载的/var/www/onlyoffice/Data中再怎么写入数据,哪些数据都是固定的,不会再变动了。


下面我们进入正文,拆包,删除VOLUME的定义,

首先我们把要修改的docker image文件导出

docker save {镜像文件} -o {输出文件}.tar

然后用tar拆包

mkdir {输出文件}
tar xf {输出文件}.tar -C {输出文件}

然后我们在manifest.json中可以看到各个层的定义
其中第一个字段表示配置文件的名称,我们要改的是这个文件。

"Config":"2b17a854ed0b5118f6625fd29a444ca3e993df5a2c76e4fa394ae998bb376611.json"

打开2b17a854ed0b5118f6625fd29a444ca3e993df5a2c76e4fa394ae998bb376611.json文件
找到下面这一段,这里可以看到我们要删除的VOLUME了。

"Volumes": {
    "/etc/onlyoffice": {},
    "/usr/share/fonts/truetype/custom": {},
    "/var/lib/onlyoffice": {},
    "/var/lib/postgresql": {},
    "/var/log/onlyoffice": {},
    "/var/www/onlyoffice/Data": {} //就是这个
},

我们搜索/var/www/onlyoffice/Data字段,删除所有相关内容。
我们找到3处关于/var/www/onlyoffice/Data的定义
一个是这样的定义

 {
    "created": "2018-07-13T12:08:54.58653107Z",
    "created_by": "/bin/sh -c #(nop)  VOLUME [/etc/onlyoffice /var/log/onlyoffice /var/lib/onlyoffice /var/www/onlyoffice/Data /var/lib/postgresql /usr/share/fonts/truetype/custom]",
    "empty_layer": true
},

还有两个是这样的定义,这里删除的时候一定要注意逗号,,如果删除是最后一行,还要删除上一行逗号。

"Volumes": {
    "/etc/onlyoffice": {},
    "/usr/share/fonts/truetype/custom": {},
    "/var/lib/onlyoffice": {},
    "/var/lib/postgresql": {},
    "/var/log/onlyoffice": {}, //逗号记得删除
    "/var/www/onlyoffice/Data": {} //删除这行
},

接下来就是保存修改了,进入之前{输出文件}的文件夹后运行

tar cf ../{输出文件}.tar .

最后把新的{输出文件}.tar导回docker

docker load -i {输出文件}.tar

「一键投喂 软糖/蛋糕/布丁/牛奶/冰阔乐!」

pch18

(๑>ڡ<)☆谢谢老板~

使用微信扫描二维码完成支付

版权声明:如无特别说明,本文为作者原创,如需转载须联系作者本人同意,未经作者本人同意不得擅自转载。
添加新评论
暂无评论