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

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

所以我的问题是,此ID从何而来?当我检查docker images时,是否找到了具有repo和名称的图像,并且它的ID是对旧的现有容器新近影响的图像,是它保留在缓存中并用于现有容器的图像的副本吗?

接下来的另一个问题:
创建容器后,更改现有(本地)镜像上的任何内容是否会以任何方式影响现有容器?

谢谢。

最佳答案

docker 镜像具有名称和镜像ID。此blog描述了在docker-v1.10之前和之后来自镜像ID的位置。

如果您对正在运行的容器使用的镜像执行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),以使容器从最新镜像运行。

关于docker - 强制删除Docker镜像如何影响使用它的现有容器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40448210/

10-10 17:00
查看更多