$ docker run --rm -it busybox
/ # who
<empty>

В следующем сеансе я пытаюсь подключиться к этому док-контейнеру и ожидаю появления второго пользователя, но опять не повезло:

$ docker attach `docker container ls | grep busybox | cut -d" " -f1`
/ # who
<empty again>

Итак, вопрос в том, почему не происходит вход в систему не при первом запуске и присоединении, а не при последующих подключениях? И почему нет ни единого входа в этот контейнер?

3
egor7 15 Авг 2019 в 15:23

2 ответа

Лучший ответ

who читает список пользователей из /var/run/utmp. В обычной системе Linux программа login запрашивает имя пользователя и пароль, а затем запускает оболочку пользователя. Он также обновляет /var/run/utmp новым пользователем. То же самое происходит с серверами SSH и Telnet. Ожидается, что они обновят /var/run/utmp.

В контейнере Docker login обычно не выполняется. Docker изолирует ресурсы от хост-системы с помощью пространства имен Linux, но не предоставляет полноценную систему Linux. Когда вы вводите Docker-контейнер, данная точка входа или команда выполняется с PID 1. Последующие docker exec вызовы обрабатываются аналогичным образом. Docker входит в пространство имен контейнера и выполняет данную команду.

4
Alexander Fasching 16 Авг 2019 в 08:40

РЕДАКТИРОВАТЬ: после некоторого прочтения я вижу, Александр отвечает как более к сути. Пара полезных ссылок, которые я читал по этому пути:

https://docs.docker.com/engine/security/security/

https://lwn.net/Articles/531114


Насколько я понимаю, Docker-контейнер busybox очень прост и не поддерживает все функциональные возможности полноценного Linux.

Здесь Я думал, что понимаю Docker, пока увидел образ докера BusyBox, обсуждается, что это за изображение и для чего оно нужно.

3
Alexei Martianov 16 Авг 2019 в 09:29