Вопрос или проблема
После установки Docker я получаю ошибку, когда пытаюсь запустить пример Hello World:
Error response from daemon: Cannot start container 4145d0fccd96b904e4ab4413735f1129b8765429bad5be71dc8d5f4c0760666d:
failed to create endpoint high_saha on network bridge:
failed to add the host (veth7f6f907) <=> sandbox (veth788d9dc) pair interfaces: operation not supported
(Я только что обновил свой Debian сервер с Wheezy на Jessie)
Кто-нибудь знает, почему я получаю эту ошибку? Я что-то пропустил во время обновления?
Заранее спасибо за помощь.
Вы загрузили свою систему с кастомным ядром от OVH, которое создано в соответствии с их спецификациями и может быть не подходящим для запуска нужного вам программного обеспечения.
Измените конфигурацию вашего выделенного сервера, чтобы загружаться с ядра, установленного на жесткий диск вашей Linux-дистрибуции.
В моем случае ошибка появляется каждый раз, когда я обновляю ядро Linux. Она исчезает, когда я перезагружаю компьютер.
Я использую Arch Linux
У меня была такая же проблема (pair interfaces: operation not supported) и я использую кастомное ядро. Для меня причиной было отсутствие модуля “Виртуальное Ethernet устройство пары” CONFIG_VETH.
│ CONFIG_VETH:
│ │ Это устройство представляет собой локальный Ethernet туннель. Устройства создаются в паре. Когда один конец получает пакет, он появляется на другом конце и наоборот.
│ Символ: VETH [=m]
│ │ Тип : tristate
│ │ Подсказка: Виртуальное Ethernet устройство пары
│ │ Расположение:
│ │ -> Драйверы устройств
│ │ -> Поддержка сетевых устройств (NETDEVICES [=y])
│ │ -> Поддержка сетевых драйверов ядра (NET_CORE [=y])
надеюсь, это поможет
Я отключил модули ядра (kernel.modules_disabled
) после настройки загрузки.
Мне пришлось добавить строку veth
в /etc/modules-load.d/docker-modules.conf
.
Теперь он выглядит так
# Для Docker
ip_tables
iptable_nat
nf_tables
nf_conntrack
nf_conntrack_netlink
nf_nat
nf_tables
nfnetlink
nft_chain_nat
nft_compat
xfrm_algo
xfrm_user
x_tables
xt_MASQUERADE
xt_addrtype
xt_conntrack
xt_nat
xt_tcpudp
br_netfilter
veth
# Docker overlay
overlay
Также опубликовано на https://github.com/moby/moby/issues/27426#issuecomment-2602513927
Чтобы добавить еще один ответ для случая, когда это может произойти:
На дистрибутивах на базе Arch Linux, когда пакеты ядра linuxNNN
обновляются, модули ядра могут не загружаться по мере необходимости. (например, veth
в этом случае требуется Docker)
Пакеты ядра Linux на Arch Linux расположены в каталогах с версиями внутри /lib/modules
. Когда пакет ядра обновляется, номер версии изменяется и старый каталог заменяется новым с данной версией. Таким образом, если вы не перезагрузите систему, больше невозможно загрузить модуль ядра для текущей запущенной версии ядра Linux.
Диагностика
-
Проверьте текущую версию ядра
uname -r
-
Проверьте, какая версия каталога модулей ядра существует
ls -lA /lib/modules
-
Если эти две версии не совпадают, или
modprobe veth
возвращает (modprobe: FATAL: Module veth not found in directory /lib/modules/${VERSION_HERE}
), то вам потребуется перезагрузить систему для решения проблемы.
Решение
- Перезагрузите систему:
sudo reboot
илиsudo systemctl reboot
Ответ или решение
Теория
Ошибка "failed to add the pair interfaces (operation not supported)" в Docker может возникать по нескольким причинам, связанным, в частности, с конфигурацией ядра Linux и необходимыми для работы Docker модульными зависимостями. Основная суть проблемы заключается в том, что Docker не может создать соединение между виртуальными сетевыми интерфейсами (Virtual Ethernet Pair), что часто указывает на отсутствующие или неправильно настроенные модули ядра.
Пример
При обновлении вашей системы с Debian Wheezy до Jessie может возникнуть ситуация, когда настройки ядра и драйверов не соответствуют требованиям Docker. Это связано с тем, что при обновлении конфигурации системы ядро может остаться нестабильным для ряда новых современных программных решений, таких как контейнеризация с помощью Docker.
Возникает ситуация, когда система загружается с пользовательского ядра, предоставленного, например, провайдером хостинга (OVH). Это ядро может быть оптимизировано под определенные задачи, но не поддерживает все необходимые функции для работы Docker, особенно если оно было настроено на отсутствие ряда стандартных модулей, таких как "Virtual Ethernet Pair Device" (VETH).
Применение
-
Проверка загружаемого ядра:
- На системах, предоставленных сторонними провайдерами, как правило, загрузка может производиться с их собственного ядра. Для стабильной работы Docker следует загрузиться с ядра, установленного на жесткий диск вместе с вашей Linux-дистрибуцией. Убедитесь, что в конфигурации загрузки сервера выбрано правильное ядро.
-
Убедитесь в наличии и загрузке всех необходимых модулей ядра:
- Docker требует загрузки специфических модулей ядра, отвечающих за создание виртуальных сетевых интерфейсов. Проверьте, загружен ли модуль VETH:
sudo modprobe veth
Если команда не проходит, проверьте, существуют ли необходимые модули в вашей системе. Например, вы можете проверить наличие модуля с помощью:
lsmod | grep veth
- Добавьте модуль VETH в список автозагрузки модулей. Это может потребовать редактирования файла конфигурации модулей, например
/etc/modules-load.d/docker-modules.conf
, где необходимо добавить строку с именем модуля.
- Docker требует загрузки специфических модулей ядра, отвечающих за создание виртуальных сетевых интерфейсов. Проверьте, загружен ли модуль VETH:
-
Решение проблемы после обновления ядра:
- После обновления пакетов ядра на подобных Arch Linux системах возникает рассинхронизация между текущим загруженным ядром и файлами модулей в
/lib/modules
. Проверьте версию ядра:uname -r
И сравните с доступными версиями модулей:
ls -lA /lib/modules
- Если версии не совпадают, необходимо перезагрузить систему:
sudo reboot
- После обновления пакетов ядра на подобных Arch Linux системах возникает рассинхронизация между текущим загруженным ядром и файлами модулей в
-
Добавление отсутствующих модулей:
- Если вы используете кастомное ядро и ошибка возникает из-за отсутствия определенных модулей, таких как
CONFIG_VETH
, убедитесь, что они включены в конфигурацию ядра. Для этого при компиляции ядра в разделе конфигурации сетевых драйверов включите поддержку виртуальных сетевых туннелей.
- Если вы используете кастомное ядро и ошибка возникает из-за отсутствия определенных модулей, таких как
-
Мониторинг и логирование:
- Отслеживание логов Docker и системы поможет выявить дополнительные детали о причине ошибки. Логи Docker можно просмотреть с помощью:
sudo journalctl -u docker.service
- Глубокое понимание ошибки и условий её возникновения способствует быстрому устранению проблем в будущем.
- Отслеживание логов Docker и системы поможет выявить дополнительные детали о причине ошибки. Логи Docker можно просмотреть с помощью:
В результате применения вышеперечисленных действий ваша система должна корректно поддерживать все необходимые функции для работы Docker, устранив пресловутое сообщение об ошибке "failed to add the pair interfaces".