Docker中的导入和加载有什么区别?

新手上路,请多包涵

我了解 export (用于容器)和 save (用于图像)之间的区别。但是在一天结束时,保存或导出生成的压缩包应该用作 _图像_。

那么为什么有 2 个命令可以从 tarball 制作图像呢?

原文由 rdupz 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 559
2 个回答

docker save 确实会生成一个 tarball, 包含所有父层和所有标签 + 版本。

docker export 也会产生一个压缩包,但没有任何层/历史。

它通常在想要 “展平”图像 时使用,如 Thomas Uhrig 的“展 平 Docker 容器或图像”中所示:

 docker export <CONTAINER ID> | docker import - some-image-name:latest

但是,一旦生成了这些 tarball,加载/导入就可以:

  • docker import一个 甚至 不是图像的 tarball 创建 一个 图像(只是一个您想要作为图像导入的文件系统)

创建一个 空的文件系统映像 并导入 tarball 的内容

  • docker load 从一个 tarred 存储库创建可能的 多个 图像(因为 docker save 可以将 多个 图像保存在一个 tarball 中)。

从文件或标准输入流加载 tarred 存储库

原文由 VonC 发布,翻译遵循 CC BY-SA 3.0 许可协议

作为一个 Docker 新手,我 很难 学到这种差异。

  • 在一个系统上:
   docker run -it myImage /bin/bash

–> 工作正常

  • 在同一系统上(使用 save ):
   docker save myImage -o myImage.tar

  • 在第二个系统上(使用 import ):
   docker import myImage.tar

–> 效果很好,没有问题,只需要标记:

   docker tag _the_assigned_tag myImage

  • 在第二个系统上:
   docker run -it myImage /bin/bash

docker:来自守护进程的错误响应:OCI 运行时创建失败:container_linux.go:345:启动容器进程导致“exec:\”/bin/bash\“:stat /bin/bash:没有这样的文件或目录”:未知

寻找该错误使我想到了各种原因,例如 MountFlags="slave" ,但真正的原因竟然是这篇文章中描述的原因:我应该使用加载而不是导入。不知道发生了什么,Docker 的错误消息并没有让我在任何意义上走上“导入”原因的轨道,直到我偶然发现了这篇文章。

原文由 qootec 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题