Не удается запустить контейнер 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

С докер.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

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

5 ответов


следующее для системы 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

установить выполните:

# apt-get install -y thin-provisioning-tools

когда раздел 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

В нашем случае просто нужно начать и остановить службу.

в зависимости от вашей системы вы можете запустить:

service docker stop
service docker start

или:

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

или:

sudo /etc/init.d/docker restart

У меня была такая же проблема, и я не смог ее исправить. Я нашел кое-что многообещающее в: 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. У меня были другие проблемы, потому что я запускаю ядро 4.3.3 (по умолчанию 3.16) с grsec.

несмотря на проблемы GRSEC (mount & chmod denied), я смог запустить docker и создать некоторый образ и контейнер.

затем я перезагрузился бы, и docker просто выплюнул бы ошибку. Я побежал thin_check и нашел следующее:

  • метаданные были в порядке (я не использую тонкий пул прямо сейчас, так как докер продолжает говорить что мой тонкий бассейн-это не тонкий бассейн...)
  • данные были повреждены.

пытался восстановить его, но thin_restore аварий.

Я понял, что: демон докера ... работал, но не может быть остановлен с помощью systemctl stop docker.услуга. В нем говорится, что служба остановлена, но демон все еще находится в памяти (PS-elf | grep docker)

чтобы устранить проблему, мне пришлось изменить DOCKER_STORAGE_OPTIONS в /etc/default / docker

rm -rf /var/lib/docker
reboot

At время загрузки, служба запускается. docker info

показывает информацию, как ожидалось. Создал образ. Перезагрузившись, сервис снова запускается нормально. Я думаю, что в основном демон docker не может быть остановлен и убивает его с помощью:

kill <pid>

приводит к повреждению файла данных, и поэтому контрольная сумма не будет совпадать.

нижняя строка-не смешивать и сопоставлять docker.демон службы и docker. По крайней мере на Debian и Ubuntu.