gpt4 book ai didi

docker - 从 Docker 容器中删除文件后回收磁盘空间

转载 作者:行者123 更新时间:2023-12-02 09:08:33 25 4
gpt4 key购买 nike

我已成功将大型数据库备份文件 (35 GB) 复制到 Docker 容器中,并在本地恢复我的数据库(随后 this walkthrough )。我现在想从 Docker 容器中删除该 .bak 文件以回收空间。我通过运行 sudo docker exec sql_server rm -rf/var/opt/mssql/backup/example.bak 来做到这一点,但这并没有回收空间 - 我的 Docker.raw 文件仍然大约 76 GB。当我运行 docker system df 时,它说我的容器有 45 GB。我尝试了 docker system prune -a ,但这回收了 0B。重新启动 Docker 并没有解决问题。既然文件已被删除,我该如何缩小以重新获得空间?

最佳答案

I did that by running sudo docker exec sql_server rm -rf /var/opt/mssql/backup/example.bak but this didn’t reclaim the space

这是否会释放空间取决于该文件是仅存在于容器中还是存在于您的镜像中。一旦镜像中存在某个文件,在容器中删除该文件并不会修改镜像本身。相反,仅更新容器文件系统,并指示该文件已从该容器的 View 中删除。这就是分层文件系统在幕后的工作原理。

When I run docker system df it says my containers are 45 GB though

您可以更深入地检查一下。对于任何特定容器,您可以在容器 ID 上运行 docker container diff 命令来查看该容器内已修改的文件。

I tried docker system prune -a but this reclaimed 0B.

这不会从正在运行的容器中回收空间。如果容器停止,它将被删除,并且如果没有其他指向它,启动该容器的镜像也可能被删除。否则,docker 将避免运行容器,并且无法对正在运行的容器内的文件进行修剪。

my Docker.raw file remains about 76 GB

这是一个非常关键的点,它表明你正在Mac上运行Docker。上述所有步骤都可能会减少 Docker 运行所在的 Linux 环境的磁盘空间。然而,Docker 在 Mac 和 Windows 上使用的 VM 被映射到一个文件,该文件会根据 VM 的需要而按需增长。来自 Docker for Mac FAQ ,由于 Mac 上的稀疏文件工作,此文件报告的磁盘空间可能不准确:

Docker.raw consumes an insane amount of disk space!

This is an illusion. Docker uses the raw format on Macs running the Apple Filesystem (APFS). APFS supports sparse files, which compress long runs of zeroes representing unused space. The output of ls is misleading, because it lists the logical size of the file rather than its physical size. To see the physical size, add the -ks switch; to see the logical size in human readable form, add -lh:

$ cd ~/Library/Containers/com.docker.docker/Data/vms/0
$ ls -klsh Docker.raw
2333548 -rw-r--r--@ 1 akim staff 64G Dec 13 17:42 Docker.raw

In this listing, the logical size is 64GB, but the physical size is only 2.3GB.

Alternatively, you may use du (disk usage):

$ du -h Docker.raw
2,2G Docker.raw

我还建议查看 Docker VM 内部使用了多少磁盘空间:

sudo docker run --rm -v /var/lib/docker:/host/var/lib/docker:ro \
busybox df -h /host/var/lib/docker

关于docker - 从 Docker 容器中删除文件后回收磁盘空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51600673/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com