Ответ
Контейнер использует ядро хостовой операционной системы. Контейнеризация (Docker, containerd) обеспечивает изоляцию на уровне процессов, файловой системы и сети (через namespaces и cgroups), но не эмулирует отдельное ядро.
Практическая проверка:
# Ядро на хосте
uname -r
# Вывод: 5.15.0-91-generic
# Ядро внутри контейнера
docker run --rm alpine uname -r
# Вывод будет идентичным: 5.15.0-91-generic
Ключевые следствия:
- Совместимость: Все контейнеры на хосте должны быть совместимы с его версией ядра. Запуск контейнера, собранного для значительно более старого ядра, может привести к ошибкам.
- Модули ядра: Контейнер может использовать модули ядра, загруженные на хосте (например, для работы с файловыми системами или сетевыми драйверами).
- Безопасность: Уязвимость в ядре хоста затрагивает все контейнеры. Это отличие от виртуальных машин, где у каждой своя изолированная копия ядра.
Пример из практики: При обновлении ядра хоста для устранения уязвимости (например, Dirty Pipe) необходимо перезапустить все контейнеры, чтобы они начали использовать обновленное ядро.