Базовые отчеты Docker-контейнера неизвестны

Когда я запускаю базовый Docker-контейнер (из Google Cloud Shell) примерно так

docker pull debian
docker run -i -t debian:wheezy /bin/bash

а затем введите runlevel по приглашению оболочки запущенного контейнера уровень запуска unknown, Я должен установить (apt-get) конкретные пакеты для добавления поддержки уровней запуска. Если да, то какие или что еще может быть не так?

2 ответа

Решение

Docker - это инструмент изоляции приложений, а не инструмент виртуализации ОС. Уровни запуска находятся на уровне ОС, ОС запускается, монтирует каталоги и запускает службы для достижения уровня запуска. В контейнере ваше приложение запускается, конец. Вы можете предположить, что контейнер находится на уровне однопользовательского запуска, поскольку вы единственный пользователь, обращающийся к среде, но это действительно не должно иметь значения для установки приложений.

BMitch прав. Docker не имеет никакого отношения к уровням выполнения, он никогда не изменит уровень выполнения. Но это еще не все.

runlevelunknown часто встречается в некоторых системах systemd, Ваш вопрос помечен как Debian, так и Debian Jessie (последний выпуск Debian, использующий systemd, использует сценарий совместимости для печати уровня выполнения). Дистрибутивы на основе арок и нестабильные дистрибутивы на основе RedHat (например, Fedora) печатают unknown при выполнении runlevelто есть им даже наплевать на фальшивый уровень запуска.

Если вы проверите свой скрипт уровня запуска, вы получите следующий вывод в недавнем дистрибутиве:

$ ls -l $(which runlevel)
lrwxrwxrwx 1 root root 9 Jun 18 14:44 /usr/bin/runlevel -> systemctl

(то есть на арке, runlevel в /usr/sbin на Debian, но это также указывает на systemctl на Debian)

runlevel скрипт указывает на sysemtd контроль над последними дистрибутивами.

В общем runlevel не имеет никакого значения в последних дистрибутивах (из-за systemd на который в значительной степени все перешли). Если вы посмотрите внутрь /etc/rc.d/rc*.d/ каталоги, они почти пустые.

Что на самом деле определяет, как init обрабатывает загрузку системы - цель systemd по умолчанию, расположенная здесь:

/lib/systemd/system/default.target

Или же /etc/systemd/system/default.target, если это существует.

Другие вопросы по тегам