Docker зависает, требуя перезагрузки

Мы используем докер 1.7.1, сборку 786b29d на RHEL 6.7. Недавно у нас было несколько раз, когда демон докера зависал, и нам приходилось перезагружать машину, чтобы вернуть его.

Типичный сценарий заключается в том, что контейнер, который работал нормально в течение нескольких недель, внезапно начинает выдавать ошибки. Когда-нибудь мы можем перезапустить контейнер, и все будет хорошо. Но в других случаях все команды докера будут зависать, а перезапуск демона не удастся, и я вижу это в ps:

4 Z root 4895 1 0 80 0 - 0 exit Aug23 ? 00:01:24 [docker]

Глядя в системный журнал, я увидел это:

device-mapper: ioctl: unable to remove open device docker-253:6-1048578-317bb6ad40cded3fbfd752d95551861c2e4ef08dffc1186853fea0e85da6b12b
INFO: task docker:16676 blocked for more than 120 seconds.
Not tainted 2.6.32-573.12.1.el6.x86_64 #1
"echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
docker D 000000000000000b 0 16676 1 0x00000080
ffff88035ef13ea8 0000000000000082 ffff88035ef13e70 ffff88035ef13e6c
ffff88035ef13e28 ffff88062fc29a00 0000376c85170937 ffff8800283759c0
0000000000000400 00000001039d40c7 ffff8803000445f8 ffff88035ef13fd8
Call Trace:
[] _mutexlock_slowpath+0x96/0x210
[] ? wake_up_process+0x15/0x20
[] mutex_lock+0x2b/0x50
[] sync_filesystems+0x26/0x150
[] sys_sync+0x17/0x40
[] system_call_fastpath+0x16/0x1b

Последняя версия докера — 1.12.1, а мы — 1.7.1. Можно или нужно установить новую версию? 1.7.1 — это версия, которую устанавливает yum. Если бы мне нужна была новая версия, как бы я ее установил (извините, если это глупый вопрос, я не системный администратор).

Погуглив, я нашел это на сайте Red Hat: «Red Hat не рекомендует запускать какую-либо версию Docker на любых выпусках RHEL 6». Мы уже несколько лет используем докер на RHEL 6, так что это меня смущает. Обновление до RHEL 7 сейчас для нас не вариант.

Кто-нибудь может пролить свет на эти вопросы? Нам нужно, чтобы докер работал надежно без частых перезагрузок.


person Larry Martell    schedule 28.08.2016    source источник


Ответы (2)


Docker 1.7.1 действительно устарел по сегодняшним меркам. С тех пор в версиях были исправлены сотни ошибок, улучшены стеки драйверов, исправления безопасности и добавлены ценные функции. Похоже, у вас возникла проблема со стеком хранилища, и есть большая вероятность, что она будет исправлена ​​в более новой версии.

Docker заявил, что версии по умолчанию в системах управления пакетами, таких как yum и apt, могут быть устаревшими, и что вам следует использовать их репозиторий. Лучший способ сделать это — добавить информацию о репозитории Yum в вашу систему, чтобы вы могли установить его, как и другие пакеты. Инструкции находятся здесь: Установка в Red Hat Enterprise Linux.

Примечание. Это позволит вам установить Docker, и служба будет называться docker, а пакет — docker-engine. В прошлом это сбивало с толку некоторых людей.

yum install docker-engine

Docker также предоставил скрипт, который делает это проще (запускается от имени администратора/рута):

curl -fsSL https://get.docker.com/ | sh
person DevOps Dan    schedule 28.08.2016

Не используйте систему на основе RHEL6.

RHEL6 использует ядро ​​2.6 с бэкпортированными исправлениями, чтобы поддерживать работу Docker. Для Docker обычно требуется ядро ​​версии 3.10+. Docker отказался от поддержки RHEL6 начиная с версии 1.8, поэтому маловероятно, что для него появятся дополнительные пакеты.

Если вы должны использовать RHEL6, не используйте петлевой сопоставитель устройств по умолчанию для хранения. Настройте тонкий пул LVM для использования Docker.

person Matt    schedule 29.08.2016