28 августа 2016 г. в 16:44
Ошибка при запуске Docker после обновления Linux Debian/Ubuntu

После обновления Debian Jessie до testing я обнаружил проблему при запуске Docker. Набрав команду systemctl status docker.service был выведен следующий текст ошибки:

[graphdriver] prior storage driver "aufs" failed: driver not supported Error starting daemon: error initializing graphdriver: driver not supported

Как оказалось, в новых версиях debian была прекращена поставка модуля ядра aufs, так как вместо него в состав ядра была принята файловая система OverlayFS. OverlayFS - это проект SUSE по созданию более прогрессивной замены UnionFS и AUFS.

Основным недостатком ранее существующей файловой системы UnionFS и созданного на её основе ответвления AUFS является излишне усложнённая кодовая база, составляющая примерно 60 тысяч строк кода, не использующая штатную подсистему VFS. Код AUFS и UnionFS очень трудоёмок для сопровождения и не отвечает требованиям к оформлению кода для ядра Linux, что не позволяло включить его в основной состав ядра. Кроме того, производительность и надёжность данных систем оставляет желать лучшего. В рамках проекта OverlayFS предпринята попытка создания компактного, надёжного и высокопроизводительного аналога UnionFS, построенного поверх штатной подсистемы VFS. (opennet.ru)

Замена aufs на overlayfs

Окей, убедили, надо переходить на overlayfs. Чтобы указать Docker, что нужно сменить файловую систему, необходимо создать файл /etc/systemd/system/docker.service со следующим содержанием:

[Service] ExecStart= ExecStart=/usr/bin/docker -H fd:// --storage-driver=overlay

Смысл сего действа вот в чем: создание нового файла /etc/systemd/system/docker.service позволяет перезаписать значение по-умолчанию, расположенное в файле /lib/systemd/system/docker.service, а чтобы docker не ругался на дублирование значения ExecStart, перед заданием нового значения требуется указать ExecStart с пустым новым значением.

Теперь перезапустим docker с помощью команды systemctl daemon-reload

К сожалению, после перехода на другую файловую систему все существующие docker images будут потеряны. Если вы хотите сохранить их, нужно либо загрузиться со старым ядром, либо ещё перед обновлением заранее сохранить их. О том, как это сделать, подробно написано здесь: http://muehe.org/posts/switching-docker-from-aufs-to-devicemapper/