首页 > 解决方案 > 无法运行 docker commit,空间不足

问题描述

所以我对 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 了,但是我的图像完全符合我的要求,那为什么不能保存呢?每次我运行提交时是否需要额外的 9GB 空间?

如果我能提供帮助,尽量避免关闭 VPS 并增加其磁盘空间。

谢谢你的帮助。

标签: docker

解决方案


据我所知,没有办法合并图像,但可以删除它们。每次提交都会增加图像的大小。您可以通过以下方式查看图像的图层及其大小:

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


推荐阅读