为什么docker会为我的容器列出两个单独的图像(其中一个不存在)?

我有我认为是一个非常奇怪的情况:“docker ps”报告,我的容器正在运行一个不存在的图像。 “docker inspect mycontainer”给出了存在的图像的哈希值,但是哈希不是在检查输出中的.config.image节点中命名的图像。

docker inspect mycontainer在使用的图像上给出两种不同的意见:

 [ { ... "Image": "sha256:64c33ae1c7ca7f7838d34505a7ec93e2b8d59e5140f0f5a6974776340cde9d17", ... "Config": { ... "Image": "regserver:5000/company/myimage:64", ... }, ... } ] 

docker images说,其中一个图像存在,一个不:

 PS C:\Windows\system32> docker images regserver:5000/company/myimage REPOSITORY TAG IMAGE ID CREATED SIZE regserver:5000/company/myimage 60 fdfbd99e9bcf 2 weeks ago 9.48 GB regserver:5000/company/myimage 59 64c33ae1c7ca 2 weeks ago 9.48 GB regserver:5000/company/myimage 58 7152dfbe5808 2 weeks ago 9.48 GB regserver:5000/company/myimage 57 d2603ae3b3b3 3 weeks ago 9.48 GB regserver:5000/company/myimage 56 cff15a634cfb 3 weeks ago 9.48 GB regserver:5000/company/myimage 55 b52e8d21fc10 3 weeks ago 9.48 GB regserver:5000/company/myimage 52 5e00504b1cf8 3 weeks ago 9.48 GB regserver:5000/company/myimage 51 157eef3e8c9e 3 weeks ago 9.48 GB 

docker ps输出我认为是不正确的信息:

 PS C:\Windows\system32> docker ps --all --format 'table {{.Names}}\t{{.Status}}\t{{.Image}}' NAMES STATUS IMAGE mycontainer Up About an hour regserver:5000/company/myimage:64 

docker docker inspect给出的散列是image regserver的散列:5000 / company / myimage:59但是这不是docker docker ps所使用的映像。 docker ps说的图片正在使用不是一个存在的图像。

是什么赋予了? 这是docker工人(Windows)中的错误? 这里有什么事情我只是不明白?

这主要是猜测,但是看起来,当你创build容器时,你告诉Docker使用当时存在的名为regserver:5000/company/myimage:64 ,并且具有64c33ae1c7ca...的散列。 一段时间以后,这张图片没有被标记,并被重新标记为regserver:5000/company/myimage:59 (或者不太可能,没有标记,然后你偶然发现了散列冲突)。

docker inspect显示Config下的原始图像名称,因为该字典列出了用于创build容器的参数,并且在顶级Image键中显示图像哈希,因为regserver:5000/company/myimage:64不再表示它使用了什么所以Docker默认为哈希。

真正的问题是为什么docker ps显示旧的图像名称; 我似乎回想起,在以前的Docker版本中,将一个图片去掉标签会导致仍然使用该图片的容器在docker ps输出中列出图片的哈希值。