Почему при запуске top внутри Docker-контейнера отображаются только процессы внутри контейнера? - PullRequest
1 голос
/ 17 апреля 2019

Я запускаю top внутри контейнера Docker и вижу, что единственные процессы, которые отображаются, это начальный процесс, используемый для запуска контейнера и top.Почему он показывает это вместо отображения других процессов на хосте докера?

1 Ответ

3 голосов
/ 17 апреля 2019

Чтобы понять, почему это происходит, вам необходимо понять основные понятия Linux, которыми пользуется Docker.

В ядре Linux есть такая функция, которая называется namespaces, которая разделяет / изолирует ресурсы хоста таким образом, чтобы набор процессов видел один набор ресурсов, а другой набор процессов видел другой набор ресурсов.

Linux имеет 7 типов пространств имен:

  • Крепление - изоляция точек крепления
  • UTS - изолировать имя хоста
  • IPC - изолировать межпроцессные коммуникационные ресурсы
  • PID - изолировать пространство номеров PID
  • Сеть - изолировать сетевые интерфейсы
  • Пользователь - изолировать номера UID / GID
  • Cgroup - изолировать корневой каталог cgroup

Когда вы работаете на своей машине с Linux, все, что вы делаете, находится в одном и том же пространстве имен, но когда вы создаете контейнер, выполняя docker run по умолчанию, он создает новое отдельное пространство имен, чтобы изолировать контейнер от вашего хоста.

В конкретном случае вашего вопроса вы видите только один запущенный процесс, потому что контейнер находится в другом пространстве имен PID, чем ваш хост-компьютер.

Вы можете сказать Docker об использовании одного и того же пространства имен PID, используя --pid="host" при создании контейнера, в некоторых случаях это полезно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...