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

时间:2019-07-01 17:54:45

标签: 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

但是,如果我运行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

这是图像列表:

$ 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

我什至不确定这些图像是否全部合并为33GB,或者33GB只是最后一张图像的文件大小。这只是一个简单的Kali Linux码头工人,上面有一个自定义工具,其空间约为5GB。我非常确定,如果此映像的大小为70GB,则它比安装了更多内容的VM更大。

对于这里发生的事情非常困惑。任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:2)

您的df -h输出与我希望在Mac上看到的 输出相对应,这意味着您的linux容器未在运行df -h的系统上运行

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

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

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

docker run --rm -it -v /var/lib/docker/tmp:/r alpine df -h /r 

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

tldr;您在虚拟机中运行的docker可用空间少于主机显示为可用的空间。

答案 1 :(得分:0)

我修剪了一些图像和容器,然后它起作用了。

int width = 100;
String s = "129018";

CharSequence padded = IntStream.range(0,width)
            .parallel()
            .map(i->i-(width-s.length()))
            .map(i->i<0 ? '0' :s.charAt(i))
            .collect(StringBuilder::new, (sb,c)-> sb.append((char)c), (sb1,sb2)->sb1.append(sb2));

docker image prune

https://docs.docker.com/config/pruning/