Базовые отчеты Docker-контейнера неизвестны
Когда я запускаю базовый Docker-контейнер (из Google Cloud Shell) примерно так
docker pull debian
docker run -i -t debian:wheezy /bin/bash
а затем введите runlevel
по приглашению оболочки запущенного контейнера уровень запуска unknown
, Я должен установить (apt-get
) конкретные пакеты для добавления поддержки уровней запуска. Если да, то какие или что еще может быть не так?
2 ответа
Docker - это инструмент изоляции приложений, а не инструмент виртуализации ОС. Уровни запуска находятся на уровне ОС, ОС запускается, монтирует каталоги и запускает службы для достижения уровня запуска. В контейнере ваше приложение запускается, конец. Вы можете предположить, что контейнер находится на уровне однопользовательского запуска, поскольку вы единственный пользователь, обращающийся к среде, но это действительно не должно иметь значения для установки приложений.
BMitch прав. Docker не имеет никакого отношения к уровням выполнения, он никогда не изменит уровень выполнения. Но это еще не все.
runlevel
unknown
часто встречается в некоторых системах 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
, если это существует.