如何修复Docker中的“设备上没有空间”错误?

hkmswyz6  于 2023-11-17  发布在  Docker
关注(0)|答案(4)|浏览(169)

我运行的是Mac原生Docker(没有virtualbox/docker-machine)。
我有一个巨大的图像,其中有很多基础设施(Postgres等)。
当我运行我的图像时,我得到一个错误,如:

could not create directory "/var/lib/postgresql/data/pg_xlog": No space left on device

字符串
在我的主机Mac /var是坐在60%的可用空间,一般我的磁盘有大量的存储空间。
这是我需要提升到给予更多资源的Docker配置吗?
docker内部mount的相关行:

none on / type aufs (rw,relatime,si=5b19fc7476f7db86,dio,dirperm1)
/dev/vda1 on /data type ext4 (rw,relatime,data=ordered)
/dev/vda1 on /etc/resolv.conf type ext4 (rw,relatime,data=ordered)
/dev/vda1 on /etc/hostname type ext4 (rw,relatime,data=ordered)
/dev/vda1 on /etc/hosts type ext4 (rw,relatime,data=ordered)
/dev/vda1 on /var/lib/postgresql/data type ext4 (rw,relatime,data=ordered)


下面是df

[11:14]  
Filesystem     1K-blocks    Used Available Use% Mounted on
none           202054928 4333016 187269304   3% /
tmpfs            1022788       0   1022788   0% /dev
tmpfs            1022788       0   1022788   0% /sys/fs/cgroup
/dev/vda1      202054928 4333016 187269304   3% /data
shm                65536       4     65532   1% /dev/shm
tmpfs             204560     284    204276   1% /run/docker.sock

6g8kf2rb

6g8kf2rb1#

我还没有找到很多选项,在github的主要问题是https://github.com/docker/for-mac/issues/371
建议的一些备选办法有:

  • 如果您可以删除所有图像/容器,则可以按照以下说明操作:

第一个月

  • 您可以尝试删除所有未使用的映像/容器,但这已被证明不是很有效:

docker system prune

  • 使用一个更大的模板图像,使用自制软件安装qemu并移动图像,请参阅此具体评论:https://github.com/docker/for-mac/issues/371#issuecomment-242047368,但您需要至少有2倍的空间才能做到这一点,而不会丢失容器/图像。

参见:How do you get around the size limitation of Docker.qcow2 in the Docker for Mac?https://forums.docker.com/t/no-space-left-on-device-error/10894/26

vjrehmav

vjrehmav2#

我遇到了同样的问题,运行docker system prune --volumes解决了这个问题。
默认情况下不会清理卷,您必须为docker system prune指定--volumes标志才能清理卷。
请访问:https://docs.docker.com/config/pruning/#prune-everything

bzzcjhmw

bzzcjhmw3#

我最近在Linux上安装docker时遇到了这个问题,它使用了devicemapper存储驱动(默认)。
Docker镜像由文件系统快照的只读层组成,每一层都是由Dockerfile中的命令创建的,它们构建在一个公共的基础存储快照之上。基础快照由所有镜像共享,并具有一个默认大小为10GB的文件系统。当你运行镜像时,你会在镜像中的所有层之上获得一个新的可写层,所以你可以在运行的容器中添加新文件,但它最终仍然基于10GB文件系统的相同基础快照。至少对于devicemapper是这样的,不确定其他驱动程序。Here是docker的相关文档。
要将此默认值更改为其他值,您可以设置守护进程参数,例如docker daemon --storage-opt dm.basesize=100G。由于您可能不会手动运行守护进程,因此需要在某些文件中编辑docker守护进程选项,具体取决于您如何运行docker守护进程。使用docker for mac,您可以在Daemon->Advanced下的首选项中将守护进程参数编辑为JSON。您可能需要添加以下内容:

{
    "storage-opts": ["dm.basesize=100G"]
}

字符串
(but就像我说的,我在Linux上遇到了这个问题,所以没有尝试上面的方法)。
无论如何,为了使此生效,您需要删除所有现有映像(以便在新的基础快照上以新的大小重新创建它们)。请参阅存储驱动程序选项。

9gm1akwq

9gm1akwq4#

如果要使用docker image prune -a删除所有内容

相关问题