由于设备映射程序错误,无法运行Docker容器

我不能在Docker中创build和运行新的容器。 但在同一时间可以运行先前创build的容器。

当我尝试做这样的事情:

[user@host ~ ] docker run --name=fpm-5.3 debian:jessie 2014/07/12 07:34:08 Error: Error running DeviceCreate (createSnapDevice) dm_task_run failed 

docker.log

 2014/07/12 05:57:11 POST /v1.12/containers/create?name=fpm-5.3 [f56fcb6f] +job create(fpm-5.3) Error running DeviceCreate (createSnapDevice) dm_task_run failed [f56fcb6f] -job create(fpm-5.3) = ERR (1) [error] server.go:1025 Error: Error running DeviceCreate (createSnapDevice) dm_task_run failed [error] server.go:90 HTTP Error: statusCode=500 Error running DeviceCreate (createSnapDevice) dm_task_run failed 

dmsetup状态

 docker-8:1-1210426-pool: 0 209715200 thin-pool 352 2510/524288 205173/1638400 - ro discard_passdown queue_if_no_space 

但是他们在磁盘上有很多可用空间。

dmsetup信息

 Name: docker-8:1-1210426-pool State: ACTIVE Read Ahead: 256 Tables present: LIVE Open count: 1 Event number: 1 Major, minor: 252, 0 Number of targets: 1 

docker信息

 Containers: 4 Images: 65 Storage Driver: devicemapper Pool Name: docker-8:1-1210426-pool Data file: /var/lib/docker/devicemapper/devicemapper/data Metadata file: /var/lib/docker/devicemapper/devicemapper/metadata Data Space Used: 12823.3 Mb Data Space Total: 102400.0 Mb Metadata Space Used: 9.9 Mb Metadata Space Total: 2048.0 Mb Execution Driver: native-0.2 Kernel Version: 3.14.4 

docker版本

 Client version: 1.0.0 Client API version: 1.12 Go version (client): go1.2.2 Git commit (client): 63fe64c Server version: 1.0.0 Server API version: 1.12 Go version (server): go1.2.2 Git commit (server): 63fe64c 

以下是一个Fedora / RHEL系统,所以你需要调整Debian的…

 # systemctl stop docker.service # thin_check /var/lib/docker/devicemapper/devicemapper/metadata 

如果没有错误,请继续:

 # thin_check --clear-needs-check-flag /var/lib/docker/devicemapper/devicemapper/metadata # systemctl start docker.service # docker run --name=fpm-5.3 debian:jessie 

当docker分区被填满并且docker在重新启动后不再启动时,我遇到了这个问题:

 # thin_check /var/lib/docker/devicemapper/devicemapper/metadata examining superblock examining devices tree missing devices: [0, -] bad checksum in btree node examining mapping tree thin device 72 is missing mappings [137494, 137594] bad checksum in btree node thin device 72 is missing mappings [137721, -] bad checksum in btree nodebad checksum in btree nodebad checksum in btree nodebad checksum in btree nodebad checksum in btree nodebad checksum in btree nodebad checksum in btree nodebad checksum in btree nodebad checksum in btree nodebad checksum in btree nodebad checksum in btree nodebad checksum in btree nodebad checksum in btree nodebad checksum in btree node 

我能够用这个程序修复:

 # thin_dump -r /var/lib/docker/devicemapper/devicemapper/metadata -o /tmp/metadata.xml # thin_restore -i /tmp/metadata.xml -o /var/lib/docker/devicemapper/devicemapper/metadata 

我有同样的问题,无法修复它。 我发现一些有希望的: http : //grokbase.com/t/gg/docker-user/1563fzdtm7/docker-docker-runs-out-of-space-when-trying-to-create-a-new-image '默认的docker存储驱动程序为您的映像分配10GB的存储块。 转移到overlayfs并完全避免这一点。 在启动docker守护进程的命令中,只需添加“-s overlay”

这解决了我的问题。

我一直在用Debian 8.2来解决这个问题。 我有其他的问题,因为我用grsec运行4.3.3内核(默认是3.16)。

尽pipeGRSEC问题(mount&chmod denied),我能够运行docker并创build一些图像和容器。

然后,我会重新启动,docker将只是吐出错误。 我运行thin_check,我发现是这样的:

  • 元数据是好的(我现在不使用精简池,因为docker不断告诉我,我的精简池不是一个精简池)
  • 数据已损坏。

试图修复它,但thin_restore崩溃。

我意识到:docker守护进程…正在工作,但不能停止与systemctl停止docker.service。 它表示服务已停止,但守护进程仍在内存中(ps -elf | grep docker)

要解决这个问题,我必须更改/ etc / default / docker中的DOCKER_STORAGE_OPTIONS

 rm -rf /var/lib/docker reboot 

在启动时,服务启动。 docker信息

显示预期的信息。 build立一个图像。 重新启动,服务再次启动罚款。 我认为基本上docker守护进程不能被停止,并用一个:

 kill <pid> 

导致数据文件被破坏,因此校验和不匹配。

底线是不要混合和匹配docker.service和docker守护进程。 至less在Debian / Ubuntu上。

在我们的情况下,只需要启动和停止服务。