我正在运行Mac原生Docker(没有虚拟机/泊坞机)。
我有一个巨大的形象,里面有很多基础设施(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
答案 0 :(得分:7)
我没有找到很多选项,github的主要问题是https://github.com/docker/for-mac/issues/371
有些选项建议:
docker rm $(docker ps -a -q)
docker rmi $(docker images -q)
docker volume rm $(docker volume ls |awk '{print $2}')
rm -rf ~/Library/Containers/com.docker.docker/Data/*
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
答案 1 :(得分:2)
我最近在linux上安装了一个使用devicemapper
存储驱动程序(默认)的docker安装。确实有一个docker配置我需要改变以解决这个问题。
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"]
}
(但就像我说的,我在linux上有这个问题,所以没有尝试上面的内容。)
无论如何为了使此功能生效,您需要删除所有现有图像(以便在新基本快照的基础上重新创建它们,并使用新的大小)。请参阅storage driver options。
答案 2 :(得分:0)
我遇到了同样的问题,运行 docker system prune --volumes
解决了问题。
“默认情况下不会修剪卷,您必须为 docker system prune 指定 --volumes 标志才能修剪卷。”