저는 USB 드라이브를 사용하여 일부 Docker 이미지를 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에서 xMB이고 때로는 yMB입니다. xMB일 때 압축 해제에 실패하여 손상되었다고 불평했습니다.
왜 그럴까요? 여기서 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은 압축 해제가 아닌 일반 실행 파일일 수 있습니다. zipfile 디렉터리는 SomeImage.zip 또는 SomeImage.zip.zip 디렉터리 중 하나에서 찾을 수 없으며 SomeImage.zip.ZIP도 찾을 수 없습니다. .
답변1
파이프와 함께 gzip을 사용하는 것이 더 좋고 쉽습니다.
docker save some/image | gzip >/media/$USER/Docker/SomeImage.gz
gunzip < /media/$USER/Docker/SomeImage.gz | docker load