Docker: 清理所有已停止的容器,除了数据容器

4

Docker如何清理所有已停止的容器但保留数据容器?

  • docker rm $(docker ps -qa -f status=exited)也会删除这些数据容器!

如何清理相应的镜像?


3
您好,数据容器是仅包含数据的对象,通常用于存储和传输数据。"How do you define a data-only container ?" 的翻译是 "您如何定义一个仅包含数据的容器?" - user2915097
这是一个概念,其中容器不运行冗长的进程,而只通过 --volumes-from 定义其他容器使用的卷。通过这种方式,这些数据容器在应用程序更改时无需更新,并且可以单独处理。(参见相关问题:https://dev59.com/vmEi5IYBdhLWcg3wIJTc) - Jens Piegsa
1
更新说明:引入了命名卷的概念,现在使得仅数据容器的概念已经过时。 - Jens Piegsa
3个回答

5

通常情况下,没有明确的方法来区分仅数据容器和其他容器。 如果您希望它们在清理时保留,您可能可以设计一定的命名方案,并拥有更复杂的脚本,不会删除名称以data-开头的容器。


4

按照 Mykolas 的建议,我引入了一种命名规范,要求所有仅含数据的容器都以 -data 作为后缀。

删除除名为 *-data 的所有已停止容器:

docker ps -a -f status=exited | grep -v '\-data *$'| awk '{if(NR>1) print $1}' | xargs -r docker rm

删除所有未使用的图像:

docker rmi $(docker images -qa -f dangling=true)

数据容器使用的图片将被保留。

3
也许你可以在所有数据容器的docker run命令中添加“-e“type=data-only””,然后根据此标准进行过滤,可以使用grep或docker inspect。例如,我使用以下命令启动一个容器:sudo docker run -it -e type=data-only ubuntu bash root@f7e9ea4efbd9:/# ,然后sudo docker inspect -f "{{.Config.Env}}" f7e命令显示[type=data-only PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin]。

1
更简单的方法是,使用命令 sudo docker inspect -f "{{ index .Config.Env 0}}" f7e,它会打印出 type=data-only - user2915097

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