如何删除docker卷的内容?

时间:2016-07-16 21:27:31

标签: docker docker-compose

我有一个从docker-compose.yml文件创建的卷。让我们调用卷my_volume以及与my_container关联的容器。我想脚本删除卷的内容。以下所有内容都假定my_container已被停止,但未被删除。

我可以使用以下方式列出卷的内容:

docker run --rm -v my_volume:/data/ ubuntu ls -la /data

这很有效,接下来我尝试使用以下方法删除数据文件夹的内容:

docker run --rm -v my_volume:/data/ ubuntu rm -rf /data/*

没有报告任何错误消息,因此事情显示成功,但是当我再次列出卷的内容时,卷中的所有数据都没有被删除。

我可以通过输入容器然后执行删除来完成删除:

docker run --rm -it -v my_volume:/data/ ubuntu /bin/bash

然后从容器内:

rm -rf /data/*

这样可以正常工作并且内容被删除,但这会破坏目的,因为它不可编写脚本。当我尝试在容器外部使用rm以及如何成功删除卷的内容时,为什么rm不起作用的任何想法?我应该注意,我不想删除卷并创建一个新卷,因为这样做需要删除与我不想做的卷关联的原始容器/图像。谢谢你的帮助!

1 个答案:

答案 0 :(得分:2)

  

当我尝试在容器外使用它时,为什么rm不起作用的任何想法

我相信正在发生的事情是在主机shell中评估/data/*。因此,容器实际上是使用命令rm -rf /data/somefile /data/otherfile ...运行的,其中包含主机上/data目录中的文件列表。如果这些文件与容器不匹配,那么它似乎没有删除任何内容。

您可以使用单引号来防止主机shell中发生扩展。

rm -rf '/data/*'