Docker保存/加载丢失原始映像存储库/名称/标记

时间:2017-05-13 19:25:57

标签: docker

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

为什么会出现此行为?如何保留原始图像名称?

6 个答案:

答案 0 :(得分:4)

我遇到了同样的问题,因此我使用以下命令对其进行了手动修复:

docker tag <Image-ID> <desired Name:Tag>

Reference


[注意]:

  

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

AND

  

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

docker save repo
     

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

docker save repo:tag
     

将带标签的图像+父项保存在存储库中,并创建存储库文件   列出标签

docker save imageid
     

保存图像+父级,不创建存储库文件。保存   仅与图像有关,并且标记被设计排除在外,并保留为   用户根据自己的命名进行填充的练习   惯例。

     

Reference

答案 1 :(得分:3)

我遇到了同样的问题,我意识到这是由于docker save命令而发生的。 如果我将“ docker save”命令与“ imageid”一起使用,那么在加载映像时,我将丢失存储库和标签名称。示例:

docker save -o ubuntu-18.04.tar ea4

但是,如果我将“ docker save”命令与“ repo:tag”一起使用,则在加载映像时我将能够维护我的存储库和标签名称。 示例:

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

答案 2 :(得分:1)

单个图片ID 可以包含多个名称/标签, 所以你放松名称和标签的方式是 保存并将图像加载到tar球后,我期望发生什么。

模式详细信息在讨论中here

答案 3 :(得分:0)

来自docker文档:

cat exampleimage.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

这个对我有用。

答案 4 :(得分:0)

这是一个解决方法

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

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

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

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

答案 5 :(得分:0)

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

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

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