19

我不能再在 Docker 中创建和运行新容器了。但同时可以运行以前创建的容器。

当我尝试做这样的事情时:

[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

码头工人信息

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

码头工人版本

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
4

5 回答 5

42

以下是针对 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

要安装thin_check命令,请运行:

# apt-get install -y thin-provisioning-tools
于 2014-07-21T14:44:54.720 回答
8

当 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
于 2014-09-26T13:13:53.900 回答
3

在我们的例子中只需要启动和停止服务。

根据您的系统,您可以运行:

service docker stop
service docker start

或者:

sudo systemctl stop docker.service
sudo systemctl start docker.service

或者:

sudo /etc/init.d/docker restart
于 2017-09-13T08:14:35.010 回答
1

我有同样的问题,无法解决。我在以下位置发现了一些有希望的东西: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”'

这解决了我的问题。

于 2015-10-05T12:16:59.240 回答
1

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

尽管存在 GRSEC 问题(mount & chmod denied),我还是能够运行 docker 并创建一些图像和容器。

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

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

试图修复它,但 thin_restore 崩溃。

我意识到:docker daemon ... 正在工作,但无法使用 systemctl stop docker.service 停止。它说服务已停止但守护程序仍在内存中(ps -elf | grep docker)

为了解决这个问题,我不得不更改 /etc/default/docker 中的 DOCKER_STORAGE_OPTIONS

rm -rf /var/lib/docker
reboot

在启动时,服务启动。码头工人信息

按预期显示信息。建立了形象。重新启动,服务再次正常启动。我认为基本上 docker 守护进程无法停止并使用以下命令将其杀死:

kill <pid>

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

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

于 2016-02-09T03:03:16.033 回答