我使用 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