web-dev-qa-db-ja.com

デバイスマッパーエラーのため、Dockerコンテナーを実行できません

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 info

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

docker version

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
16
loadaverage

以下は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
38
Kazen

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
6
scottc

私たちの場合、サービスを開始および停止するだけです。

システムに応じて、次のコマンドを実行できます。

service docker stop
service docker start

または:

Sudo systemctl stop docker.service
Sudo systemctl start docker.service

または:

Sudo /etc/init.d/docker restart
2
Mohammed Hakimi

私はこの問題をDebian 8.2で戦っています。 grsecで4.3.3カーネル(デフォルトは3.16)を実行しているため、他の問題がありました。

GRSECの問題(mount&chmod denied)にもかかわらず、私はdockerを実行して、いくつかのイメージとコンテナーを作成することができました。

次に、再起動すると、Dockerはエラーを吐き出します。私はthin_checkを実行し、私が見つけたのはこれです:

  • メタデータは問題ありませんでした(Dockerが私のシンプールがシンプールではないことを私に伝え続けるので、私は現在シンプールを使用していません...)
  • データが壊れていました。

修復しようとしましたが、thin_restoreがクラッシュしました。

私は気づきました:Dockerデーモン...は機能していましたが、systemctl stop docker.serviceで停止できません。サービスは停止しているが、デーモンはまだメモリ内にあると表示されている(ps -elf | grep docker)

問題を解決するには、/ etc/default/dockerのDOCKER_STORAGE_OPTIONSを変更する必要がありました

rm -rf /var/lib/docker
reboot

起動時にサービスが開始されます。ドッカー情報

期待どおりに情報を表示します。イメージを構築しました。再起動すると、サービスは再び正常に起動します。基本的にはdockerデーモンを停止して次のコマンドでkillすることはできないと思います:

kill <pid>

データファイルが破損するため、チェックサムが一致しません。

結論は、docker.serviceとdocker daemonを混ぜて一致させないことです。少なくともDebian/Ubuntuでは。

1
E.T

同じ問題があり、修正できませんでした。 http://grokbase.com/t/gg/docker-user/1563fzdtm7/docker-docker-runs-out-of-space-when-trying-to-create-a- new-image 'デフォルトのdockerストレージドライバーは、イメージに10 GBのストレージブロックを割り当てます。 overlayfsに移動して、これを完全に回避してください。 dockerデーモンを起動するコマンドに「-s overlay」を追加するだけです '

これで問題が解決しました。

1
VivaceVivo