当我尝试通过具有现有容器的docker rmi
删除图像时,收到错误消息。 (正常)
当我添加强制标记docker rmi -f
时,图像被删除,当我使用docker ps -a
检查容器状态时,容器仍然存在,但图像名称成为ID。
所以我的问题,从哪里来这个ID?它是保存在缓存中并用于现有容器的映像的副本,当我检查docker images
时,我发现一个包含在repo和name中的映像,并且它的ID是新旧映射的ID容器
接下来的另一个问题: 创建容器后,是否正在更改影响现有容器的现有(本地)映像的任何内容?
感谢。
答案 0 :(得分:2)
泊坞窗图像具有名称和图像ID。此blog描述了映像ID在pre-docker-v1.10及其之后的来源。
如果您执行正在运行的容器使用的图像的docker rmi -f图像,您实际上并未删除实际图像,而是删除图像上的名称和标记。
确实docker ps
会显示:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
578e28246977 96931e4c66bd "/bin/tini -- /usr/lo" 3 minutes ago Up 3 minutes 8080/tcp, 50000/tcp drunk_shannon
但docker images
仍在显示您的图片:
<none> <none> 96931e4c66bd 6 weeks ago 711.9 MB
它没有标记。删除此容器后,图像也不会被删除。图像保留在列表中。您可以使用docker run -d 96931e4c66bd
(使用ID)
你甚至可以重拍它:
docker tag 96931e4c66bd my-jenkins:1.0
比docker images
显示:
my-jenkins 1.0 96931e4c66bd 6 weeks ago 711.9 MB
下面的另一个问题:创建容器后,是 改变影响任何方式的现有(本地)图像的任何内容 现有的容器?
不,当您对图像(同名)进行“更新”时,正在运行的容器可能会丢失它的图像名称(只有一个ID,就像在容器运行期间删除图像一样) )。 您需要使用新映像(在更新后将具有另一个映像ID)重新执行run-command以使容器从最新映像运行。