“docker stack deploy”:Docker镜像在哪里?

7
我创建了一个docker compose的*.yml文件,其中有许多指定了镜像标签的服务。然后我让docker使用docker stack deploy -c .\my-compose-file.yml --with-registry-auth dev在本地机器上为我部署栈,并且它能够运行所有服务。当我同时运行docker events时,可以在日志中看到image pull消息,因此docker会拉取丢失的镜像。但是当我运行docker image ls -a时,这些已经拉取的镜像没有显示出来。
所以我想知道下载的镜像有什么生命周期(当我执行docker stack rm时是否会从我的驱动器中删除),如果不会,请问该如何清除这样的镜像?
1个回答

1
我假设您已经配置了多节点Swarm。在这种情况下,docker image ls仅在本地计算机上运行,而堆栈中的容器分布在各个节点上。图像将在将运行容器的节点上拉取。
要获取容器列表,您需要进入Swarm的每个成员并发出命令。简单的方法是使用具有身份密钥的节点的ssh访问:
docker node ls | cut -c 31-49 | grep -v HOSTNAME | xargs -I"SERVER" sh -c "echo SERVER; ssh SERVER /usr/local/bin/docker image ls -a"

不,我也在单节点Swarm上观察到这种行为。我在本地机器上部署了一个stack(在Swarm中只有一个节点)并且我没有看到镜像被拉到我的机器上,这让我感到困惑。 - Simon Achmüller
您可以通过检查Docker存储覆盖图像元数据的文件系统来验证图像是否在您的机器上。它通常位于Linux机器上的/var/lib/docker/image/overlay2/中。使用docker system prune -a --volumes将删除所有未使用的项目。 - jordanvrtanoski
当然,在群集部署期间拉取的镜像仍将最终存储在本地镜像缓存中。它们将具有预期的“镜像ID”,但是Swarm将删除“标签”,导致显示为“<none>”。 - Metin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接