Корневой пароль внутри контейнера Docker

Я использую образ Docker, который был создан с помощью команды USER, чтобы использовать пользователя без полномочий root с именем dev. Внутри контейнера я "dev", но я хочу отредактировать файл /etc/hosts.

Так что мне нужно быть пользователем root. Я пытаюсь выполнить команду su, но меня просят ввести пароль root.

Какой пароль пользователя root по умолчанию внутри контейнера Docker?

Ответ 1

В конце концов, я решил перестроить свои образы Docker, чтобы я изменил пароль root на то, что я буду знать.

RUN echo "root:Docker!" | chpasswd

или же

RUN echo "Docker!" | passwd --stdin root 

Ответ 2

Вы можете войти в контейнер Docker, используя пользователя root (ID = 0) вместо предоставленного пользователя по умолчанию, когда вы используете -u. Например

docker exec -u 0 -it mycontainer bash

root (id = 0) - пользователь по умолчанию в контейнере. Разработчик изображений может создавать дополнительных пользователей. Эти пользователи доступны по имени. При передаче числового идентификатора пользователь не должен существовать в контейнере.

из документации Docker

Ответ 3

Я могу заставить его работать с помощью приведенной ниже команды.

[email protected]:# docker exec -it --user $(username) $(containername) /bin/bash

Ответ 4

У меня была именно эта проблема: не удается 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

Ответ 5

Есть несколько способов сделать это.

  1. Чтобы запустить Docker, перекрывающий настройку USER

    docker exec -u 0 -it containerName bash
    

или

docker exec -u root -it --workdir / <containerName> bash
  1. Сделайте необходимые права доступа к файлу и т.д. Во время сборки образа в файле Docker

  2. Если все пакеты доступны в вашем образе Linux, chpasswd в файле docker перед утилитой USER.

Ответ 6

docker exec -u 0 -it containername bash

Ответ 7

Получите оболочку вашего работающего контейнера и измените пароль root:

docker exec -it <MyContainer> bash

[email protected]:/# passwd
Enter new UNIX password:
Retype new UNIX password:

Ответ 8

Я бы предложил лучшее решение - предоставить аргумент --add-host NAME:IP для запуска докера при запуске контейнера. Это обновит файл /etc/hosts/ без необходимости становиться root.

В противном случае вы можете переопределить параметр USER, указав флаг -u USER на docker run. Однако я бы посоветовал это сделать, так как вы не должны менять вещи в запущенном контейнере. Вместо этого внесите изменения в файл Docker и создайте новое изображение.

Ответ 9

Пароль "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.

Ответ 10

попробуйте следующую команду, чтобы получить root-доступ

$ sudo -i 

Ответ 11

Вы можете использовать корневую команду USER в вашем Dockerfile.

Ответ 12

Когда вы запустите контейнер, вы будете пользователем root, но вы не будете знать, что такое root pw. Чтобы установить что-то, что вы знаете, просто используйте "passwd root". Сделайте снимок/зафиксируйте контейнер, чтобы сохранить ваши действия.

Ответ 14

По умолчанию Docker-контейнеры запускаются от имени пользователя root.

Если вы все еще используете контейнер, вы можете использовать команду exit, чтобы вернуться к пользователю root (пользователь по умолчанию) вместо того, чтобы снова запускать контейнер.

Пример -

[[email protected] ~]$ ls
[[email protected] ~]$ other-commands..
[[email protected] ~]$ exit
[[email protected] /]# ls