2016-07-17 3 views
2

При запуске основного контейнера Docker (внутри Google Cloud Shell), как такотчетов контейнеров Основного Docker уровень выполнение неизвестны

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

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

ответ

2

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

+0

Я вижу, похоже, что я сделал ту же ошибку новобранец, что и вопрос [здесь] (http://stackoverflow.com/questions/27154567/ubuntu-12-04-into-docker-service-mysql-start). Можете ли вы, возможно, указать на статью, в которой далее объясняется различие между инструментом изоляции приложений и инструментом виртуализации ОС, поэтому я могу систематически систематически различать, что еще может быть другим внутри контейнера напротив образа виртуальной машины? – Drux

+1

Вопрос о [различиях между Docker и VMs] (http://stackoverflow.com/q/16047306/596285) является старым, но может по-прежнему быть полезным. – BMitch

+0

Отлично, thx. – Drux

1

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

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 Или, если это существует.

Смежные вопросы