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

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

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

所以我的问题,从哪里来这个ID? 它是保存在caching中的图像的副本,并用于现有的容器,因为当我检查docker images我发现在回购和名称中的图像,其ID是一个新的影响到旧的现有容器。

另一个问题如下:一旦创build了一个容器,就会改变影响现有容器的现有(本地)图像上的任何东西。

谢谢。

泊坞窗图像有一个名字和一个图像ID。 这个博客描述了图像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 

另一个问题如下:一旦创build了一个容器,就会改变影响现有容器的现有(本地)图像上的任何东西。

不,当你对图像(同名)进行“更新”时,正在运行的容器可能会丢失它的图像名称(只有一个ID,就像在容器运行期间删除图像一样)。 您将需要重新执行带有新映像的run-command(在更新之后将具有另一个映像ID)以使容器从最新映像运行。