如何删除 docker 卷的内容?
How do you remove the contents of a docker volume?
我有一个从 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/*
没有报告任何错误消息,所以一切看起来很成功,但是当我再次列出卷的内容时,卷中 none 的数据已被删除。
我可以通过进入一个容器然后像这样进行移除来完成移除:
docker run --rm -it -v my_volume:/data/ ubuntu /bin/bash
然后从容器中:
rm -rf /data/*
这工作正常并且内容被删除,但这违背了目的,因为它不可编写脚本。当我尝试在容器外使用 rm 时为什么它不起作用以及我如何成功删除卷的内容有什么想法吗?我应该注意,我不想删除卷并创建一个新卷,因为这样做需要删除与我不想做的卷关联的原始 container/image。感谢您的帮助!
Any ideas why rm does not work when I try to use it outside of the container
我相信正在发生的事情是 /data/*
正在主机 shell 中进行评估。所以容器实际上是 运行 使用命令 rm -rf /data/somefile /data/otherfile ...
和主机上 /data
目录中的文件列表。如果这些文件与容器不匹配,那么它似乎没有删除任何东西。
您可以使用单引号来防止在主机中发生扩展 shell。
rm -rf '/data/*'
我有一个从 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/*
没有报告任何错误消息,所以一切看起来很成功,但是当我再次列出卷的内容时,卷中 none 的数据已被删除。
我可以通过进入一个容器然后像这样进行移除来完成移除:
docker run --rm -it -v my_volume:/data/ ubuntu /bin/bash
然后从容器中:
rm -rf /data/*
这工作正常并且内容被删除,但这违背了目的,因为它不可编写脚本。当我尝试在容器外使用 rm 时为什么它不起作用以及我如何成功删除卷的内容有什么想法吗?我应该注意,我不想删除卷并创建一个新卷,因为这样做需要删除与我不想做的卷关联的原始 container/image。感谢您的帮助!
Any ideas why rm does not work when I try to use it outside of the container
我相信正在发生的事情是 /data/*
正在主机 shell 中进行评估。所以容器实际上是 运行 使用命令 rm -rf /data/somefile /data/otherfile ...
和主机上 /data
目录中的文件列表。如果这些文件与容器不匹配,那么它似乎没有删除任何东西。
您可以使用单引号来防止在主机中发生扩展 shell。
rm -rf '/data/*'