ПО умолчанию при запуске
docker run -it [myimage]
ИЛИ ЖЕ
docker attach [mycontainer]
вы подключаетесь к терминалу как пользователь root, но я хотел бы подключиться как другой пользователь. Это возможно?
docker
containers
root
Энди59469
источник
источник
docker run --user user_name
su user_name
Ответы:
Для
docker run
:Просто добавьте возможность
--user <user>
перехода на другого пользователя при запуске контейнера докеров.Для
docker attach
илиdocker exec
:Поскольку команда используется для присоединения / выполнения к существующему процессу, поэтому она напрямую использует текущего пользователя.
Если вы действительно хотите присоединиться к пользователю, которого хотите иметь, тогда
run --user <user>
или упомяните его приDockerfile
использованииUSER
источник
Вы можете запустить оболочку в работающем контейнере докера, используя такую команду:
docker exec -it --user root <container id> /bin/bash
источник
--user
Я полагаю, что опция может быть опущена, когда команды должны запускаться от имени root.USER
инструкции, см. Docs.docker.com/engine/reference/builder/#userВы можете указать
USER
в Dockerfile. Все последующие действия будут выполняться с использованием этой учетной записи. Вы можете указатьUSER
одну строку передCMD
или,ENTRYPOINT
если вы хотите использовать этого пользователя только при запуске контейнера (а не при создании образа). Когда вы запускаете контейнер из полученного изображения, вы присоединяетесь как указанный пользователь.источник
Единственный способ заставить его работать - это:
Поэтому я должен указать переменную среды $ USER, а также указать файл / etc / passwd. Таким образом, я могу скомпилировать в папке / siem и сохранить права собственности на файлы там не как root.
источник
Мое решение:
Это позволяет пользователю запускать произвольные команды с помощью инструментов, предоставляемых
my-docker-image
. Обратите внимание, как текущий рабочий каталог пользователя смонтирован/cmd
в контейнере.Я использую этот рабочий процесс, чтобы позволить моей команде разработчиков кросс-компилировать код C / C ++ для цели arm64, bsp которой я поддерживаю (
my-docker-image
содержит кросс-компилятор, sysroot, make, cmake и т. Д.). При этом пользователь может просто сделать что-то вроде:Где
cross_compile.sh
сценарий, показанный выше.addgroup/useradd
Техника позволяет пользователю владение любых файлов / каталогов , созданных сборки.Пока это у нас работает. Это вроде как хакерство. Я открыт для альтернативных реализаций ...
источник
Выполнить команду от имени пользователя www-data:
docker exec -t --user www-data container bash -c "ls -la"
источник
Для
docker-compose
. Вdocker-compose.yml
:В
.env
:источник
В качестве обновленного ответа от 2020. --user опция -u - это имя пользователя или UID (формат: <name | uid> [: <group | gid>]).
Тогда у меня это работает так,
Ссылка: https://docs.docker.com/engine/reference/commandline/exec/
источник
Это решило мой вариант использования: «Скомпилируйте материал webpack в контейнере nodejs в Windows, на котором запущен Docker Desktop с WSL2, и создайте ресурсы под вашим текущим авторизованным пользователем».
На основании ответа eigenfield . Спасибо!
Также этот материал помог мне понять, что происходит.
источник