由于设备映射程序错误,无法运行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上。
在我们的情况下,只需要启动和停止服务。