我有一个包含一个管理节点和另一个普通节点的Swarm集群,当我创建一个Swarm服务时,我使用挂载类型、挂载源和挂载目标。它在manager和node上都创建了相同名称的卷,并启动了容器,我的服务已经运行。
当我释放服务时,与服务一起创建的卷并没有被删除,这还好。
我面临的问题是,当我删除具有相同端点的卷时,它只会删除Swarm Manager中的卷,而在创建服务时在节点上创建的卷仍然存在。
我希望管理器能够删除与Swarm服务一起创建的所有卷。是否有办法实现?
我有一个包含一个管理节点和另一个普通节点的Swarm集群,当我创建一个Swarm服务时,我使用挂载类型、挂载源和挂载目标。它在manager和node上都创建了相同名称的卷,并启动了容器,我的服务已经运行。
当我释放服务时,与服务一起创建的卷并没有被删除,这还好。
我面临的问题是,当我删除具有相同端点的卷时,它只会删除Swarm Manager中的卷,而在创建服务时在节点上创建的卷仍然存在。
我希望管理器能够删除与Swarm服务一起创建的所有卷。是否有办法实现?
更新(来自评论):
根据docker service create documentation:
命名卷是一种机制,用于将容器需要的持久数据与用于创建容器的映像和主机机器分离。命名卷由Docker创建和管理,即使没有容器正在使用它,命名卷也会持久存在。命名卷中的数据可以在容器和主机机器之间以及多个容器之间共享。Docker使用卷驱动程序来创建、管理和挂载卷。您可以使用Docker命令备份或恢复卷。
因此,如果您正在使用命名卷,则正确的答案是为什么它们被删除在管理者那里,并且它们是否曾经在那里创建?
volume-x
,您可以运行以下命令:
docker service create -d \
--name cleaner \
--restart-condition none \
--mode global \
--mount type=bind,source=/var/run/docker.sock,destination=/var/run/docker.sock \
docker \
sh -c "docker volume rm volume-x"
docker volume rm volume-x
。docker service logs --follow cleaner