Контейнеры не запускаются: среда выполнения не найдена
Служба контейнеров вызывает отдельную среду выполнения для каждого контейнера и ищет её по пути из своего окружения. Путь службы короче вашего, поэтому файл, доступный в терминале, для службы может не существовать.
Вероятные причины
По порядку: сверху то, что встречается чаще.
-
Исполняемый файл среды выполнения вне пути службы
Файл установлен в каталог, которого нет в пути службы. Служба его не находит.
-
Среда выполнения не соответствует настройкам
В настройках указана одна среда выполнения, а установлена другая. Служба ищет то, чего нет.
-
Служба не перечитала настройки после правки
Настройки читаются при запуске. Правка без перезапуска ничего не меняет, и разбор идёт по старому состоянию.
Диагностика
Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.
Сообщения службы о запуске контейнеров.
journalctl -u containerd -n 30 --no-pagerПуть и окружение службы контейнеров.
systemctl show containerd -p EnvironmentОтвечает ли служба и что сообщает о себе.
sudo ctr version 2>/dev/null || sudo crictl info 2>/dev/null | headРешение
Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.
- Почему происходит
- Файл установлен в каталог, которого нет в пути службы. Служба его не находит.
- Как проверить
-
Посмотрите путь службы и расположение файла.
systemctl show containerd -p Environment -p ExecStart 2>/dev/null command -v runc crun 2>/dev/null
- Как исправить
-
Добавьте нужный каталог в путь службы или положите файл в каталог из стандартного пути. Полагаться на свой профиль нельзя: службы его не читают.
[Service] Environment=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
- Почему происходит
- В настройках указана одна среда выполнения, а установлена другая. Служба ищет то, чего нет.
- Как проверить
-
Посмотрите настройки и установленные среды.
sudo grep -iE "runtime|binary_name" /etc/containerd/config.toml 2>/dev/null | head ls /usr/bin/runc /usr/bin/crun 2>/dev/null
- Как исправить
- Приведите настройки в соответствие с установленным. Смена среды выполнения требует правки настроек, а не только установки пакета.
- Почему происходит
- Настройки читаются при запуске. Правка без перезапуска ничего не меняет, и разбор идёт по старому состоянию.
- Как проверить
-
Посмотрите время правки настроек и время запуска службы.
ls -l --time-style=full-iso /etc/containerd/config.toml 2>/dev/null systemctl show containerd -p ExecMainStartTimestamp 2>/dev/null
- Как исправить
- Перезапустите службу после правки настроек и убедитесь по журналу, что она их прочитала.
Пример вывода
Исполняемый файл среды выполнения вне пути службы. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.
containerd[8400]: time="2026-09-15T18:20:11Z" level=error msg="failed to create shim task" error="failed to start shim: exec: \"runc\": executable file not found in $PATH"
crictl[8410]: E0915 18:20:11 remote_runtime.go:319] "CreateContainer failed"
Связанные ошибки
- status=203/EXEC в systemd Код 203/EXEC означает, что systemd не смог выполнить программу из ExecStart=. Разбор причин: путь, права, интерпретатор, синтаксис оболочки.
- status=127 в systemd: команда не найдена Код 127 без имени: оболочка не нашла команду. Появляется, когда ExecStart запускает скрипт или sh -c, а внутри команды нет.
- Docker: демон не запускается без containerd docker.service падает, потому что не работает containerd.service. Разбор зависимости и сокета containerd.
- Failed to connect to bus: подключение к шине недоступно Команды systemctl не работают: нет подключения к шине. Разбор для контейнеров, сеансов по ssh и служб пользователя.
- Function not implemented в контейнере Ошибка 38 при системном вызове: вызов запрещён фильтром или отсутствует в окружении. Разбор для контейнеров.
- Node-служба не видит переменные окружения Приложение падает из-за отсутствующих переменных: файл .env не читается службой, окружение задаётся иначе.
- status=219/CGROUP в systemd Код 219/CGROUP: не удалось создать или настроить контрольную группу службы. Причины на уровне системы и контейнеров.
- status=225/NETWORK в systemd Код 225/NETWORK: не удалось создать сетевое пространство имён для службы при PrivateNetwork=yes или NetworkNamespacePath=.
Где встречается чаще всего
Источники
-
systemd.exec(5)
Environment= и путь поиска исполняемых файлов службы. -
Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
Воспроизведено установкой среды выполнения в каталог вне пути службы.