问题描述
我创建了一个 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
或不执行时将从我的驱动器中删除),如果没有,我该如何清理这些图像?
解决方法
我假设您已配置多节点群。在这种情况下,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"