我遇到了一个问题,我在运行Docker映像时可以看到对其进行了正确的修改,但是使用Docker save后,这些更改不会保留在生成的.tar文件中。
背景:虽然此流程不是最佳实践/理想方法,但我没有原始的Dockerfile来通过更改来重新创建映像,因此我改从下面的步骤进行修改。
为方便起见,我们将基础图像称为“原始”图像,将修改后的图像称为“ newimage”。
这是采取的步骤:
docker load --input original.tar
docker run -it --entrypoint bash original
在容器中,用sed进行了一小行编辑:
sed -i 's/original_line/updated_line/g' <filename>
(还尝试使用VIM和nano进行此更新,以测试编辑器和就地编辑的差异,但这根本没有改变.tar的结果)
docker commit <containerID> newimage
(以获取对新映像所做的容器更改的快照)docker run -it --entrypoint bash newimage<br>
通过cat文件视图验证图像具有正确的更新
docker save newimage > newimage.tar
Tar生成成功,但是当我解压缩并转到各个图层时,可以看到我的行更改不再存在于预期的文件中。
我还尝试了使用相同的行为,使用“ FROM original”通过Dockerfile构建方法重新创建此映像。我认为卷可以对数据持久性有所帮助,但是由于新映像具有必要的更改,因此我不确定在这种情况下是否需要卷。
我不认为这只是tar图层视图的问题,因为我的程序仍在为旧行抛出错误(好像从未进行过任何更改)。但是,谁知道。 :)
关于可能发生的事情的任何想法? Docker save文档在官方文档中有所限制,我已经尝试了所有其他所有相关解决方案的文章,但我会继续挖掘。