【问题标题】:Docker save/load lose original image repository/name/tagDocker 保存/加载丢失原始图像存储库/名称/标签
【发布时间】:2017-10-12 22:06:20
【问题描述】:

我使用的是 Docker 1.12.6。

我从 Docker 注册表中提取了一个图像。 我已使用 docker save 命令将图像导出为 tar 文件。

我删除了原始图像和容器,并使用docker load -i myImage.tar 加载了导出的图像。

现在,在运行 docker images 时,我注意到我的图像丢失了它的存储库/标签信息:

    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
<none>              <none>              5fae4d4b9e02        8 weeks ago         581.3 MB

为什么会有这种行为,我该如何保留原始图像名称?

【问题讨论】:

    标签: docker docker-image


    【解决方案1】:

    一个图像 ID可以有多个名称/标签, 所以你松开名称和标签的方式是 在将图像保存到 tar 球或从 tar 球加载图像后,我期望发生什么。

    模式详情在讨论中here

    【讨论】:

      【解决方案2】:

      我遇到了同样的问题,所以我使用以下命令手动修复它:

      docker tag &lt;Image-ID&gt; &lt;desired Name:Tag&gt;

      Reference


      [注意]:

      不一致:docker save image-repo-name -> docker load 恢复名称,docker save SHA -> docker load 没有名称或标签, docker save name:latest -> docker load 没有名称或标签。

      当前(正确的)行为如下:

      docker save repo
      

      在 repo 中保存所有标记的图像 + 父母,并创建一个 列出标签的存储库文件

      docker save repo:tag
      

      在 repo 中保存标记的图像 + 父级,并创建一个存储库文件 列出标签

      docker save imageid
      

      保存图像+父母,不创建存储库文件。保存 仅与图像相关,并且标签被设计遗漏并保留为 用户根据自己的命名进行填充的练习 约定。

      Reference

      【讨论】:

        【解决方案3】:

        使用

        docker save -o filename.tar <repo>:<tag>
        

        命令docker save &lt;image id&gt; 删除存储库和标签名称。

        要解决这个问题,请使用docker save &lt;repo&gt;:&lt;tag&gt;,它将在保存的文件中保留存储库和标签名称。例如:

        docker save -o ubutu-18.04.tar ubuntu:18.04
        

        【讨论】:

          【解决方案4】:

          来自 docker 文档:

          猫示例image.tgz | docker import - exampleimagelocal:new

          root@mymachine:/tmp# cat myimage.tar | docker import --message "New image imported from tarball" - reponame:my-image-name
          sha256:be0794427222dcb81182a59c4664b350ecb5ffb7b37928d52d72b31
          root@mymachine:/tmp# docker images
          REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
          reponame          my-image-name    be0794427222        6 seconds ago       4.31GB
          

          这个对我有用。

          【讨论】:

          • 小心 docker import 它导入会从一个甚至不是图像的 tarball 创建一个图像(只是您想要作为图像导入的文件系统)!可能会有很多副作用。有关更多信息,请参阅stackoverflow.com/questions/36925261/… 中的讨论
          【解决方案5】:

          这是一种解决方法

          1. 转到源 docker 主机,使用以下命令创建包含所有图像详细信息的文本文件 docker image ls &gt; images.txt

          2. 上面的命令会产生一个类似下面的文本文件 REPOSITORY TAG IMAGE ID CREATED SIZE &lt;none&gt; &lt;none&gt; 293e4ed402ba 2 weeks ago 315MB &lt;none&gt; &lt;none&gt; d8e4b0afd6ba 2 weeks ago 551MB

          3. 使用docker image tag 命令进行必要的编辑以设置标签

          docker image tag 293e4ed402ba postgres:latest docker image tag d8e4b0afd6ba wordpress:latest

          【讨论】:

            【解决方案6】:

            我写了一个单行脚本,导入一堆 .tar 文件并立即标记图像。

            for image in $(ls); do docker tag "$(echo $(docker import  $image))" $image ; done
            

            请注意,找到所有 tar 文件后,您应该位于该文件夹内。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2016-10-15
              • 2019-05-19
              • 2014-10-02
              • 2014-11-25
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多