zip 命令似乎没有正确完成其工作

zip 命令似乎没有正确完成其工作

我使用 USB 驱动器将一些 Docker 镜像保存到 USB 闪存盘或从 USB 闪存盘加载一些镜像,并将其分发给团队。

这是我对save其中一张图像的脚本:

echo "Saving some/image ..."
docker save some/image > /Temp/Docker/SomeImage

echo "Zipping some/image ..."
zip SomeImage.zip SomeImage 1>/dev/null

echo "Copying some/image to USB ..."
cp /Temp/Docker/SomeImage.zip /media/$USER/Docker
sync

echo "some/image done."

没什么花哨或复杂的。保存图像,将其压缩,然后将其复制到 USB。就是这样。

然后我使用这个脚本load

echo "Copying some/image from USB ..."
cp /media/$USER/Docker/SomeImage.zip /Temp/Docker
sync

echo "Unzipping some/image ..."
unzip SomeImage.zip 1>/dev/null

echo "Loading some/image ..."
docker load < /Temp/Docker/SomeImage

echo "some/image done."

再说一次,没什么复杂的。从 USB 复制、解压并加载。

但是,有时 USB 中为 x MB,有时为 y MB。当它是 x MB 时,它无法解压缩,抱怨它已损坏。

为什么会这样呢?为什么 zip 命令在这里没有确定性地起作用?

PS 或者也许这里发生了一些我不知道的事情。也许这些命令的组合导致了这里的问题。

更新

这是我得到的错误:

End-of-central-directory signature not found.  Either this file is not a zipfile, or it constitutes one disk of a multi-part archive.  In the latter case the central directory and zipfile comment will be found on the last disk(s) of this archive.

注意:SomeImage.zip 可能是普通可执行文件,而不是存档解压缩:无法在 SomeImage.zip 或 SomeImage.zip.zip 之一中找到 zipfile 目录,并且无法找到 SomeImage.zip.ZIP,期间。

答案1

将 gzip 与管道一起使用会更好、更容易:

docker save some/image | gzip >/media/$USER/Docker/SomeImage.gz

gunzip < /media/$USER/Docker/SomeImage.gz | docker load

相关内容