无法运行docker commit,空间不足

时间:2019-01-01 22:40:33

标签: docker

因此,我对Docker还是相当陌生,但仍在尝试了解一些基本知识。目前,我有两个docker映像:

[root:kali:~]# docker images
REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
kalilinux/kali-linux-docker   latest              5e4d6c84829d        About an hour ago   9.57GB
kalilinux/kali-linux-docker   <none>              f26f3ae90aee        2 months ago        1.57GB

无论出于何种原因,第一个带有latest标记的标记都是另一个标记的子标记。假设带有latest标签的容器是我提交更改的容器。

但是,现在我试图提交/保存对此图像的更改,但是出现以下错误:

  

守护程序的错误响应:处理tar文件时出错(退出状态1):   写入/usr/lib/x86_64-linux-gnu/libclang-7.so.1:上没有剩余空间   设备

我检查了磁盘空间,看起来我有4GB可用空间:

[root:kali:~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            481M     0  481M   0% /dev
tmpfs            99M  944K   98M   1% /run
/dev/vda1        25G   20G  4.1G  83% /
tmpfs           493M     0  493M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           493M     0  493M   0% /sys/fs/cgroup
/dev/vda15      105M  3.6M  101M   4% /boot/efi
/dev/loop0       88M   88M     0 100% /snap/core/5662
/dev/loop1       67M   67M     0 100% /snap/lxd/9239
tmpfs            99M     0   99M   0% /run/user/0
overlay          25G   20G  4.1G  83% /var/lib/docker/overlay2/b2178e65852a017f21124a23d63e32a66faaa8b8375429865e8433da9fc0db20/merged
shm              64M     0   64M   0% /var/lib/docker/containers/af2d2ed99d91d2247f550a23af988ce4a624e186ac80782046f0868418547d3d/mounts/shm
/dev/loop2       90M   90M     0 100% /snap/core/6130
/dev/loop3       52M   52M     0 100% /snap/lxd/9795

这是我的问题:

  1. 有什么办法可以合并我的两个图像,以免最终没有一堆子图像?
  2. docker commit命令实际上是在尝试复制容器吗?还是只是简单地保存它?我之所以提出这个问题,是因为我只剩下4GB的空间,但是我却完全按照自己的意愿拥有了图像,所以为什么不保存呢? 我每次运行commit都会需要额外的9GB空间吗?

如果可以的话,尽量避免关闭VPS并增加其磁盘空间。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

据我所知,无法合并图像,但是可以删除它们。 每次提交都会增加图像的大小。您可以使用以下方法查看图像的图层及其大小:

docker history <image name>

您可以使用Dockerfile并从头开始构建要使用的映像,而不是使用旧映像。生成有时会花费较长的时间,但是您应该找到一种自动生成图像的方法,以便能够将其重复用于生产。如果您从头开始构建图像,并使用一些经过验证的图像,则将免费获得新的修补版本。在Dockerfile中,您最多可以包含125层,这意味着您应该使用尽可能少的RUN命令,并以linux / unix表示法将它们链接起来。

RUN apt-get update -y && apt-get install -y \
  ansible \
  openssh-client \
  vim \
  wget

https://docs.docker.com/engine/reference/builder/

https://github.com/dockerfile/ubuntu/blob/master/Dockerfile