$ docker run --rm -it busybox
/ # who
<empty>
В следующем сеансе я пытаюсь подключиться к этому док-контейнеру и ожидаю появления второго пользователя, но опять не повезло:
$ docker attach `docker container ls | grep busybox | cut -d" " -f1`
/ # who
<empty again>
Итак, вопрос в том, почему не происходит вход в систему не при первом запуске и присоединении, а не при последующих подключениях? И почему нет ни единого входа в этот контейнер?
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 входит в пространство имен контейнера и выполняет данную команду.
РЕДАКТИРОВАТЬ: после некоторого прочтения я вижу, Александр отвечает как более к сути. Пара полезных ссылок, которые я читал по этому пути:
https://docs.docker.com/engine/security/security/
https://lwn.net/Articles/531114
Насколько я понимаю, Docker-контейнер busybox очень прост и не поддерживает все функциональные возможности полноценного Linux.
Здесь Я думал, что понимаю Docker, пока увидел образ докера BusyBox, обсуждается, что это за изображение и для чего оно нужно.
Похожие вопросы
Связанные вопросы
Новые вопросы
docker
По вопросам создания и запуска контейнеров Docker. ВОПРОСЫ ПО DOCKER ДОЛЖНЫ ОТНОСИТЬСЯ К РАЗРАБОТКЕ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ. Подходящие темы включают Dockerfiles, Docker Compose и архитектуру. Как правило, если ваш вопрос о том, что происходит внутри контейнера, он, вероятно, здесь по теме; если это вне контейнера, это, вероятно, не по теме.