Moby: Docker数据文件大小达到100G阈值如何处理?

创建于 2016-03-29  ·  3评论  ·  资料来源: moby/moby

docker version的输出:

Client:
 Version:      1.8.2-el7.centos
 API version:  1.20
 Package Version: docker-1.8.2-10.el7.centos.x86_64
 Go version:   go1.4.2
 Git commit:   a01dc02/1.8.2
 Built:        
 OS/Arch:      linux/amd64

Server:
 Version:      1.8.2-el7.centos
 API version:  1.20
 Package Version: 
 Go version:   go1.4.2
 Git commit:   a01dc02/1.8.2
 Built:        
 OS/Arch:      linux/amd64

docker info的输出:

Containers: 0
Images: 130
Storage Driver: devicemapper
 Pool Name: docker-253:0-3221586422-pool
 Pool Blocksize: 65.54 kB
 Backing Filesystem: xfs
 Data file: /dev/loop4
 Metadata file: /dev/loop5
 Data Space Used: 107.4 GB
 Data Space Total: 107.4 GB
 Data Space Available: 0 B
 Metadata Space Used: 60.92 MB
 Metadata Space Total: 2.147 GB
 Metadata Space Available: 2.087 GB
 Udev Sync Supported: true
 Deferred Removal Enabled: false
 Data loop file: /var/lib/docker/devicemapper/devicemapper/data
 Metadata loop file: /var/lib/docker/devicemapper/devicemapper/metadata
 Library Version: 1.02.107-RHEL7 (2015-12-01)
Execution Driver: native-0.2
Logging Driver: json-file
Kernel Version: 3.10.0-229.el7.x86_64
Operating System: CentOS Linux 7 (Core)
CPUs: 12
Total Memory: 31.2 GiB
Name: IP-5-14
ID: DNOS:FC2P:2WH4:OSYL:L2CH:U7HZ:MFL2:ZID3:SYTX:JWKP:TGIN:YYPB
WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled

其他环境详细信息(AWS、VirtualBox、物理等):

重现问题的步骤:
我想使用下面的 cmd 运行我的名为 gateway 的 docker 映像。(在网关的 Dockerfile 中设置了一个无守护进程入口点)

docker run -d -P gateway

描述您收到的结果:
容器可以照常运行

描述您预期的结果:

[root@IP-5-14 devicemapper]# docker run -d -P gateway
Error response from daemon: Error running DeviceCreate (createSnapDevice) dm_task_run failed

您认为重要的其他信息(例如问题仅偶尔发生):

  1. docker info所示,数据空间已提升到阈值 100G。
  2. 当我使用docker rm -f $(docker ps -a -q)删除容器时。 所有容器已被删除,但报告以下错误:
Error response from daemon: Cannot destroy container 5d5eed10468b: Driver devicemapper failed to remove root filesystem 5d5eed10468b809475b0eb23bda167e1a962d32092a348936d56e27417dbf578: Error running DeleteDevice dm_task_run failed
  1. 我使用docker ps -a来确保在执行第 2 步后所有容器都已移除。cmd 结果为空。 但是当我删除 NONE 图像时发生错误(如下)
[root@IP-5-14 devicemapper]# docker rmi 6fdebd7b0eb5   
Error response from daemon: Conflict, cannot delete because 6fdebd7b0eb5 is held by an ongoing pull or build
Error: failed to remove images: [6fdebd7b0eb5]

有人可以帮我一个忙吗? 多谢

最有用的评论

您需要增加容器允许的池。 为此,您需要删除您的 var/lib/docker,这将破坏您的所有容器和图像。

sudo service docker stop
sudo rm -rf /var/lib/docker
sudo dd if=/dev/zero of=/var/lib/docker/devicemapper/devicemapper/data bs=1G count=0 seek=300
这将使您的数据空间使用 300GB

这能解决您的问题吗? 另外,尝试停止 docker 进程,再次启动 docker,看看是否可以删除图像

所有3条评论

您需要增加容器允许的池。 为此,您需要删除您的 var/lib/docker,这将破坏您的所有容器和图像。

sudo service docker stop
sudo rm -rf /var/lib/docker
sudo dd if=/dev/zero of=/var/lib/docker/devicemapper/devicemapper/data bs=1G count=0 seek=300
这将使您的数据空间使用 300GB

这能解决您的问题吗? 另外,尝试停止 docker 进程,再次启动 docker,看看是否可以删除图像

Devicemapper 空间不足确实非常棘手; 我们正在https://github.com/docker/docker/issues/20272 中跟踪这方面的问题。

对于 Docker 1.11,有一个新选项可以指定要保留的最小可用空间量,并且会阻止您遇到这种情况; 见https://github.com/docker/docker/pull/20786

我将关闭这个问题,因为我认为这不是一个错误,而是一个支持问题,但请随时在此处继续讨论

好的。 多谢。 希望Docker1.11的新特性

此页面是否有帮助?
0 / 5 - 0 等级