如何强制删除docker镜像影响使用它的现有容器

时间:2016-11-06 10:19:21

标签: docker

当我尝试通过具有现有容器的docker rmi删除图像时,收到错误消息。 (正常)

当我添加强制标记docker rmi -f时,图像被删除,当我使用docker ps -a检查容器状态时,容器仍然存在,但图像名称成为ID。

所以我的问题,从哪里来这个ID?它是保存在缓存中并用于现有容器的映像的副本,当我检查docker images时,我发现一个包含在repo和name中的映像,并且它的ID是新旧映射的ID容器

接下来的另一个问题: 创建容器后,是否正在更改影响现有容器的现有(本地)映像的任何内容?

感谢。

1 个答案:

答案 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以使容器从最新映像运行。