LINUX.ORG.RU

Docker почему контейнер запускается от рута?

 ,


0

3

Привет ЛОР! Вообщем стартую контейнер:

sudo docker run -u user bla bla bla
контейнер успешно запустился, смотрю процесс
ps -aux | grep bla
root 4456 /usr/bin/docker  bla bla bla

Так и должно быть? Почему не юзер, который (-u user) ? Или почему не юзер от которого команда запускалась, который ходит в группу sudo.


А разве этой опцией указывается не пользователь внутри контейнера?

sudo docker

А почему бы просто своего пользователя в группу docker не добавить?

theNamelessOne ★★★★★
()

sudo docker run -u user bla bla bla

а что в

ps aux | grep bla

мне кажется ты немного не правильно понимаешь как докер работает.

есть демон докера котрый запущен от рута, командой docker ты просто коннектишься к нему через сокет, и уже демон запускает контейнер. Группа docker помодет только для доступа к сокету без рута, но сам процесс не меняет.

ksim
()
Последнее исправление: ksim (всего исправлений: 2)
Ответ на: комментарий от theNamelessOne

А почему бы просто своего пользователя в группу docker не добавить?

Это аналогично sudo без пароля.

i-rinat ★★★★★
()
Ответ на: комментарий от theNamelessOne

А разве этой опцией указывается не пользователь внутри контейнера?

Насколько я понял нет. Пользователь в данном примере -u user внутри контейнера вообще может быть любым, точнее нужно чтобы он был в файле passwd внутри самого контейнера. Иначе контейнер запуститься с ошибкой.

А почему бы просто своего пользователя в группу docker не добавить?

Тогда пароль sudo не придется вводить.

ving2
() автор топика
Ответ на: комментарий от ksim

мне кажется ты немного не правильно понимаешь как докер работает.

Спасибо за пояснение, действительно не понимаю. Просто я привык допустим виртуалки когда запускаешь, можно любого пользователя назначить хоть /bin/false. И в процессе будет висеть этот пользователь. Т.е. не я один такой с рутом на выходе?

а что в

вроде написал:

root
Пробывал еще вот так запускать в порядке бреда, создал пользователя
dok с /bin/false
sudo -u dok docker bla bla bla
Все равно root

ving2
() автор топика
Ответ на: комментарий от ving2

Кстати насчет добавить пользователя в группу docker. Его нужно добавить иначе на некторые команды ругается, что не может к сокету законнектиться.

ving2
() автор топика
Ответ на: комментарий от ving2

Просто я привык допустим виртуалки когда запускаешь, можно любого пользователя назначить хоть /bin/false. И в процессе будет висеть этот пользователь. Т.е. не я один такой с рутом на выходе?

какие виртуалки? что за пользователь /bin/false? это шел.

Докер не виртуалка, это контейнер для процесса.

Грепая ты видишь процесс клиента докера, а не контейнер. Грепать надо по имени процесса который ты запускаешь. он уже будет от нужного пользователя. Докеру всё равно на пользователей системы, -u указывает на пользователя внутри контейнера.

ksim
()
Ответ на: комментарий от ksim

какие виртуалки? что за пользователь /bin/false? это шел.

Ну да шел. просто выразился так коряво. Непривилегированный пользователь. Вот в kvm гостей так запускаю, от имени такого пользователя.

Грепать надо по имени процесса который ты запускаешь. он уже будет от нужного пользователя.

не в этом суть от чего грепать. я запускаю контейнер, с которого прокидывается порт мне на хост. смотрю этот сокет

sudo netstat -tulpan
ну и вижу открывшейся сокет с таким то PID, можно грепнуть по номеру пид, можно по имени. И виден там рут. Почему тогда не пользователь внутри контейнера?

ving2
() автор топика
Ответ на: комментарий от ving2

Ну да шел. просто выразился так коряво. Непривилегированный пользователь. Вот в kvm гостей так запускаю, от имени такого пользователя.

докер не виртуалка, это контейнер, докер запускает процесс на хостовой системе изолируя его, грубо говоря, с помощью cgroup и chroot.

не в этом суть от чего грепать. я запускаю контейнер, с которого прокидывается порт мне на хост. смотрю этот сокет

сокет этот открывает не приложение, а докер демон, который работает от рута, и демон уже форвардит запросы приложению в контейнер, грепать надо по приложению.

ksim
()
Ответ на: комментарий от ksim

докер не виртуалка, это контейнер

Строго говоря, это тоже виртуализация, только уровня операционной системы, а не аппаратной платформы.

ArcFi
()
Ответ на: комментарий от ksim

сокет этот открывает не приложение, а докер демон, который работает от рута, и демон уже форвардит запросы приложению в контейнер, грепать надо по приложению.

Вот сейчас посмотрел, на вывод

sudo docker ps -a
увидел там выхлоп в столбце COMMAND отнего если отгрепать. То не рут. У меня
systemd+
именно на этом контейнере, на другом мой пользователь. Ладно спасибо за конструктивный ответ, думаю разберусь как оно работает, не так давно сел за него.

ving2
() автор топика
Ответ на: комментарий от ArcFi

Строго говоря, это тоже виртуализация, только уровня операционной системы, а не аппаратной платформы.

Строго говоря да, я больше про то, что нельзя подходить к докеру как к KVM, помимо способа виртуализации, они очень сильно отличаются идеологически. в одном изолируется операционная система, в другом только процесс.

ksim
()
Ответ на: комментарий от ving2

systemd+

вот хоть убейте не понимаю зачем люди пускают systemd в докере... Докер это контейнер для приложений, а не операционных систем, init там не нужен.

ksim
()
  • 1. run -u user аналогичен указанию USER в Dockerfile
  • 2. пользователь с именем и uid должен быть создан внутри image/container-а
pod ★★
()

Почему не юзер

потому что юзер от которого докер запущен

Dred ★★★★★
()
Ответ на: комментарий от gadzira

chroot - не используется.

да не используется, используется libcontainer (либо LXC), это как то меняет ассоциацию?

ksim
()
Ответ на: комментарий от gadzira

LXC == chroot ?

??? где такое написано?

ну, ок, добавить нечего

Зачем писать что-то, если «нечего добавить»?

ksim
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.