Docker for Windows“已存在”图像根本不存在

时间:2017-08-04 03:14:17

标签: docker docker-machine

我正在尝试拉出一张也应该拉动aspnet的图像:4.7图像。然而,docker一直告诉我图像“已经存在”,但事实并非如此。有没有办法告诉Docker for Windows无论如何都要提取所需的图像?

PS C:\WINDOWS\system32> docker pull -a [hidden]/mycode
dev: Pulling from [hidden]/mycode
3889bb8d808b: Already exists
e29afd68a947: Already exists
36f010181129: Already exists
94c1c860b007: Already exists
d8096eabbf13: Already exists
67025ded22a8: Already exists
dbe75d79f130: Already exists
84d3d4630614: Already exists
301ba58699fa: Already exists
5e9f3c14f629: Already exists
90fd39402ca5: Already exists
4791db5edc55: Pull complete
1da86da74a58: Pull complete
3acc18896b8f: Pull complete
Digest: sha256:dc7e28154e63d5c22a210c314b4a80dcdba7baeea0ebf853445853680276293d
prod: Pulling from [hidden]/mycode
3889bb8d808b: Already exists
e29afd68a947: Already exists
36f010181129: Already exists
94c1c860b007: Already exists
d8096eabbf13: Already exists
67025ded22a8: Already exists
dbe75d79f130: Already exists
84d3d4630614: Already exists
301ba58699fa: Already exists
5e9f3c14f629: Already exists
a1fa39b61ce3: Already exists
98fa6868a880: Pull complete
10db2dd5f47b: Pull complete
5c881ba7245b: Pull complete
Digest: sha256:8b0464fe849148f4fb3c8e165cc7539823d974171bdb596bed48dd91bd9da20d
Status: Downloaded newer image for brunofvalli/xehub
PS C:\WINDOWS\system32> docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
[hidden]/mycode  dev                 6e8a0b8dd5f9        24 hours ago        11.8GB
[hidden]/mycode   prod                98a5df79a3ce        24 hours ago        11.8GB
PS C:\WINDOWS\system32>

我试过做

docker rmi 3889bb8d808b

但它告诉我图像不存在。

如何删除这些缓存的图片?或者我如何强制Docker下载图像呢?

修改 我想我应该从这个问题开始。 microsoft / aspnet:4.7图层/图像大小约为4GB。目前,当我尝试使用此图层/图像构建我的应用程序时,它失败了,我的猜测是它已损坏,因为在另一台机器上工作正常。我想重新获取这个基本图像,但是做docker rmi并没有从我的系统中删除这个“缓存”的图像/图层,所以我得到了这个已经存在的消息。我想再次重新下载4GB映像。有没有办法做到这一点?我正在接近重新安装Windows 10。

4 个答案:

答案 0 :(得分:4)

我认为你在图像上混淆了图层。 Docker镜像是使用dockerfile构建的。 dockerfile中的每一行都会添加一个构成图像的图层。例如,下面的基本dockerfile和上面示例中的图层标识符:

FROM busybox:latest # ----> 3889bb8d808b
MAINTAINER person # ----> e29afd68a947
RUN touch foo.txt # ----> 36f010181129
CMD ["bin/sh"] # ------> 94c1c860b007

这将创建一个docker镜像,dockerfile中的每一行构成docker镜像中的一个图层。因此,第一行将构成具有标识符busybox:latest的基础图像3889bb8d808b层。随后,在对应于dockerfile的行的前一层的顶部添加另外的层。这确实有帮助,特别是当我们对docker文件进行更改时,更改的行将更快地触发构建图像,因为单独对应于该行的层将被拉动。

同样重要的是要注意,如果您的计算机中已经存在一个图层作为其他一些泊坞窗图像的一部分,则它会直接使用,而不会每次都再次拉动同一图层。因此,在您的情况下,已经存在的图层可能是先前在某些其他图像中拉出的图层,或者甚至是您在稍后阶段更新了dockerfile的相同图像,因此触发对应于仅更改的行的图层拉取。

因此,当您尝试docker rmi 3889bb8d808b docker时,正确地说该图像不存在。由于3889bb8d808b标识符对应于图层而不是泊坞窗图像。

如果要将Docker图像保持新鲜状态,请使用docker images查找与Docker图像对应的图像ID,然后使用docker rmi <image-ID>将其删除。然后使用docker pull -a brunofvalli/xehub

答案 1 :(得分:1)

没有必要删除该缓存,docker已经下载了更新的图像。图像内置于零件中,这些零件称为图层。

更改图像时,大部分图层都会发生变化。如果docker说图像已经存在,那就没问题了。 docker实际上意味着,特定的已经存在并且在远程位置没有变化。

修改

对于Linux用户:

如果您想查看图像数据的存储位置,可以访问/var/lib/docker/image/aufs。在那里,您会找到imagedblayerdb

对于Windows用户:

/var/lib/docker安装在C:\Users\Public\Documents\Hyper-V\Virtual hard disks下的VM的持久虚拟磁盘上。有关详细信息,请参阅here。有关图像存储位置以及如何更改默认位置的讨论。

答案 2 :(得分:0)

无法使这项工作。 决定重新安装Windows :(希望此错误不会再出现。

答案 3 :(得分:0)

docker在docker仪表板上对此有一个解决方案,只需按下下面的按钮,即可正常工作! enter image description here