Пароль Root внутри контейнера Docker



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



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



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

998   10  

10 ответов:

вы можете войти в контейнер Docker с помощью корневого пользователя (ID = 0) вместо предоставленного пользователя по умолчанию при использовании . Е. Г.

docker exec -u 0 -it mycontainer bash

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

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

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

RUN echo "root:Docker!" | chpasswd

или

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

у меня была именно эта проблема не в состоянии 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 exec -u 0 -it containername bash

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

root@gitnew:# docker exec -it --user $(username) $(containername) /bin/bash

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

  1. чтобы запустить Докер, переопределяющий настройку пользователя

    docker exec -u 0 -it containerName bash
    
  2. сделать необходимые разрешения для файлов и т. д., во время сборки образа в файле Docker

  3. Если все пакеты доступны в вашем образе Linux,chpasswdв dockerfile перед утилитой пользователя.

пароль "ubuntu" для пользователя "ubuntu" (по крайней мере, в docker для ubuntu :14.04.03).

NB: 'ubuntu' создается после запуска контейнера, поэтому, если вы просто сделаете это:

 docker run -i -t --entrypoint /bin/bash  ubuntu     

вы получите корневое приглашение напрямую. Оттуда вы можете принудительно изменить пароль root, зафиксировать контейнер и, возможно, пометить его (с -f) в ubuntu: latest следующим образом:

root@ec384466fbbb:~# passwd
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
root@ec384466fbbb:~# exit

% docker commit ec3844
5d3c03e7d6d861ce519fe33b184cd477b8ad03247ffe19b2a57d3f0992d71bca

docker tag -f 5d3c ubuntu:latest

вы должны перестроить свои возможные зависимости от Убунту:последний.

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

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

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

docker exec -it <MyContainer> bash

root@MyContainer:/# passwd
Enter new UNIX password:
Retype new UNIX password:

вы можете использовать команду user root в вашем Dockerfile.

Comments

    Ничего не найдено.