Docker save 无法导出 ~50GB 图像,因为没有空间,尽管我有 150GB 可用空间

Lew*_*uce 2 docker

我只是想导出我拥有的 Docker 映像,以便可以将其推送到另一个系统;但是,由于没有空间,我什至无法保存它:

$ docker save mycustomimage:latest -o nessus.tar
Error response from daemon: write /var/lib/docker/tmp/docker-export-255300778/f2881cc25962de53a9f4efdbf759e88c86bd183abf773477ebbd5ddebc229ae8/layer.tar: no space left on device
Run Code Online (Sandbox Code Playgroud)

但是,如果我运行df -h,我可以确认我有超过 150GB 的可用空间:

$ df -h
Filesystem      Size   Used  Avail Capacity     iused               ifree %iused  Mounted on
/dev/disk1s1   466Gi  275Gi  182Gi    61%     1290334 9223372036853485473    0%   /
devfs          374Ki  374Ki    0Bi   100%        1296                   0  100%   /dev
/dev/disk1s4   466Gi  8.0Gi  182Gi     5%           8 9223372036854775799    0%   /private/var/vm
map -hosts       0Bi    0Bi    0Bi   100%           0                   0  100%   /net
map auto_home    0Bi    0Bi    0Bi   100%           0                   0  100%   /home
drivefs        466Gi  292Gi  173Gi    63% 18446744069414640546          4294967295 32808793364899312%   /Volumes/GoogleDrive
Run Code Online (Sandbox Code Playgroud)

这是图像列表:

$ docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
mycustomimage/kali      latest              a1f226987b86        12 hours ago        33GB
mycustomimage/kali      <none>              ac3292dcbd65        4 months ago        25.1GB
mycustomimage/kali      <none>              8a628403a803        6 months ago        12GB
Run Code Online (Sandbox Code Playgroud)

我什至不确定所有这些图像的总大小是否为 33GB,或者 33GB 只是最后一个图像的文件大小。它只是一个简单的 Kali Linux docker,上面有一个自定义工具,空间约为 5GB。我非常确定,如果这个映像有 70GB 大,那么它比我安装的虚拟机还要大。

pro*_*erq 5

您的df -h输出与我期望在 mac 上看到的输出相对应,这意味着您的 Linux 容器没有在df -h运行的系统上运行。

如果您运行的是 Mac 版 Docker Desktop,那么您的 docker 守护进程将在 hyperkit 虚拟机内运行,鲸鱼图标 Docker.app 应用程序在后台管理该虚拟机。该虚拟机包括具有有限大小的虚拟磁盘。此磁盘映像的最小可配置磁盘大小为 16GB。要查看您的鲸鱼图标 docker 桌面托管虚拟机有多少空间,请单击鲸鱼图标,然后选择“首选项”。在“磁盘”选项卡下,您将看到磁盘有多大,以及占用了多少空间(由于压缩)。

运行该命令时docker save,守护程序将在错误输出中引用的位置创建一个 .tar /var/lib/docker/tmp/...。由于虚拟机的磁盘没有足够的空间来容纳该临时 .tar 文件,因此您会收到磁盘空间不足错误。

要查看虚拟机可用的真实空间量,请运行以下命令:

docker run --rm -it -v /var/lib/docker/tmp:/r alpine df -h /r 
Run Code Online (Sandbox Code Playgroud)

可以增加磁盘映像可用的空间量,但请记住,即使从磁盘映像上的文件系统中删除了大文件,这也会占用硬盘驱动器上的实际空间。

太棒了;您在虚拟机中运行 docker,该虚拟机的可用空间比主机显示的可用空间要少。