Не удается запустить Docker контейнер.

Я больше не могу создавать и запускать новые контейнеры в Docker. Но в то же время можно запустить ранее созданные контейнеры.

Когда я пытаюсь сделать что-то вроде этого:

[[email protected] ~ ] 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

Ответ 1

Ниже приведена система 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

Ответ 2

Если после перезагрузки раздела докеры и докеров больше не будет запускаться после перезагрузки, я столкнулся с этим:

# 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

Ответ 3

У меня была такая же проблема, и я не смог ее исправить. Я нашел что-то многообещающее: http://grokbase.com/t/gg/docker-user/1563fzdtm7/docker-docker-runs-out-of-space-when-trying-to-create-a-new-image "Драйвер хранилища докеров по умолчанию выделяет 10 ГБ блоков хранения для вашего изображений. Перейдите на overlayfs и полностью избегайте этого. В команде, которая запускает демон вашего докера, просто добавьте "-s overlay" '

это устранило мою проблему.

Ответ 4

Я борюсь с этой проблемой с Debian 8.2. У меня были другие проблемы, потому что я запускал ядро ​​4.3.3 (по умолчанию - 3.16) с помощью grsec.

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

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

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

Пытался восстановить его, но тонкий_restore сработает.

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

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

rm -rf /var/lib/docker
reboot

Во время загрузки служба запускается.   информация о докере

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

kill <pid>

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

Нижняя строка не смешивается и не отвечает docker.service и docker daemon. По крайней мере, на Debian/Ubuntu.

Ответ 5

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