Ответ 1
В конце концов, я решил перестроить свои образы Docker, чтобы я изменил пароль root на то, что я буду знать.
RUN echo "root:Docker!" | chpasswd
или же
RUN echo "Docker!" | passwd --stdin root
Я использую образ Docker, который был создан с помощью команды USER, чтобы использовать пользователя без полномочий root с именем dev
. Внутри контейнера я "dev", но я хочу отредактировать файл /etc/hosts
.
Так что мне нужно быть пользователем root. Я пытаюсь выполнить команду su, но меня просят ввести пароль root.
Какой пароль пользователя root по умолчанию внутри контейнера Docker?
В конце концов, я решил перестроить свои образы Docker, чтобы я изменил пароль root на то, что я буду знать.
RUN echo "root:Docker!" | chpasswd
или же
RUN echo "Docker!" | passwd --stdin root
Вы можете войти в контейнер Docker, используя пользователя root (ID = 0) вместо предоставленного пользователя по умолчанию, когда вы используете -u
. Например
docker exec -u 0 -it mycontainer bash
root (id = 0) - пользователь по умолчанию в контейнере. Разработчик изображений может создавать дополнительных пользователей. Эти пользователи доступны по имени. При передаче числового идентификатора пользователь не должен существовать в контейнере.
Я могу заставить его работать с помощью приведенной ниже команды.
[email protected]:# docker exec -it --user $(username) $(containername) /bin/bash
У меня была именно эта проблема: не удается su для root, потому что я работал в контейнере как непривилегированный пользователь.
Но я не хотел перестраивать новое изображение, как предлагают предыдущие ответы.
Вместо этого я обнаружил, что могу получить доступ к контейнеру с правами root, используя 'nsenter', см. https://github.com/jpetazzo/nsenter
Сначала определите PID вашего контейнера на хосте:
docker inspect --format {{.State.Pid}} <container_name_or_ID>
Затем используйте nsenter для входа в контейнер с правами root
nsenter --target <PID> --mount --uts --ipc --net --pid
Есть несколько способов сделать это.
Чтобы запустить Docker, перекрывающий настройку USER
docker exec -u 0 -it containerName bash
или
docker exec -u root -it --workdir / <containerName> bash
Сделайте необходимые права доступа к файлу и т.д. Во время сборки образа в файле Docker
Если все пакеты доступны в вашем образе Linux, chpasswd
в файле docker перед утилитой USER.
docker exec -u 0 -it containername bash
Получите оболочку вашего работающего контейнера и измените пароль root:
docker exec -it <MyContainer> bash
[email protected]:/# passwd
Enter new UNIX password:
Retype new UNIX password:
Я бы предложил лучшее решение - предоставить аргумент --add-host NAME:IP
для запуска докера при запуске контейнера. Это обновит файл /etc/hosts/
без необходимости становиться root.
В противном случае вы можете переопределить параметр USER
, указав флаг -u USER
на docker run
. Однако я бы посоветовал это сделать, так как вы не должны менять вещи в запущенном контейнере. Вместо этого внесите изменения в файл Docker и создайте новое изображение.
Пароль "ubuntu" для пользователя "ubuntu" (по крайней мере, в докере для ubuntu: 14.04.03).
NB: "ubuntu" создается после запуска контейнера, поэтому, если вы просто это сделаете:
docker run -i -t --entrypoint /bin/bash ubuntu
Вы получите прямое приглашение root. Оттуда вы можете принудительно изменить пароль root, зафиксировать контейнер и, возможно, пометить его (с -f) на ubuntu: последним следующим образом:
[email protected]:~# passwd
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
[email protected]:~# exit
% docker commit ec3844
5d3c03e7d6d861ce519fe33b184cd477b8ad03247ffe19b2a57d3f0992d71bca
docker tag -f 5d3c ubuntu:latest
Вы должны восстановить свои возможные зависимости от ubuntu: latest.
попробуйте следующую команду, чтобы получить root-доступ
$ sudo -i
Вы можете использовать корневую команду USER в вашем Dockerfile.
Когда вы запустите контейнер, вы будете пользователем root, но вы не будете знать, что такое root pw. Чтобы установить что-то, что вы знаете, просто используйте "passwd root". Сделайте снимок/зафиксируйте контейнер, чтобы сохранить ваши действия.
Я написал сценарий bash, который может определить, какое изображение докера имеет пароль root, как null https://github.com/vadimslu/root_null_password_check.git
По умолчанию Docker-контейнеры запускаются от имени пользователя root
.
Если вы все еще используете контейнер, вы можете использовать команду exit
, чтобы вернуться к пользователю root
(пользователь по умолчанию) вместо того, чтобы снова запускать контейнер.
Пример -
[[email protected] ~]$ ls
[[email protected] ~]$ other-commands..
[[email protected] ~]$ exit
[[email protected] /]# ls