Programming

Docker 컨테이너 내부의 루트 비밀번호

procodes 2020. 5. 7. 21:21
반응형

Docker 컨테이너 내부의 루트 비밀번호


USER 명령을 사용하여 빌드 된 Docker 이미지를 사용하여 루트가 아닌 사용자를 사용하고 dev있습니다. 컨테이너 내에서 "dev"이지만 /etc/hosts파일 을 편집하고 싶습니다 .

그래서 나는 뿌리가되어야합니다. su 명령을 시도하고 있지만 루트 암호를 입력하라는 메시지가 표시됩니다.

Docker 컨테이너 내부의 기본 루트 사용자 비밀번호는 무엇입니까?


-u옵션 을 사용할 때 제공된 기본 사용자 대신 루트 사용자 (ID = 0)를 사용하여 Docker 컨테이너에 로그인 할 수 있습니다 . 예 :

docker exec -u 0 -it mycontainer bash

루트 (id = 0)는 컨테이너 내의 기본 사용자입니다. 이미지 개발자는 추가 사용자를 만들 수 있습니다. 해당 사용자는 이름으로 액세스 할 수 있습니다. 숫자 ID를 전달할 때 사용자는 컨테이너에 없어도됩니다.

Docker 설명서에서


결국 Docker 이미지를 다시 작성하기로 결정하여 내가 아는 것으로 루트 암호를 변경했습니다.

RUN echo "root:Docker!" | chpasswd

또는

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

아래 명령으로 작동시킬 수 있습니다.

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

컨테이너에서 권한이없는 사용자로 실행 중이기 때문에 루트로 전환 할 수없는이 문제가 발생했습니다.

그러나 이전 답변에서 제안한대로 새 이미지를 다시 만들고 싶지 않았습니다.

대신 'nsenter'를 사용하여 루트로 컨테이너에 액세스 할 수 있음을 발견했습니다. https://github.com/jpetazzo/nsenter

먼저 호스트에서 컨테이너의 PID를 결정하십시오.

docker inspect --format {{.State.Pid}} <container_name_or_ID>

그런 다음 nsenter를 사용하여 루트로 컨테이너를 입력하십시오.

nsenter --target <PID> --mount --uts --ipc --net --pid

docker exec -u 0 -it containername bash

몇 가지 방법이 있습니다.

  1. Docker를 실행하여 USER 설정을 재정의하려면

    docker exec -u 0 -it containerName bash
    

또는

docker exec -u root -it --workdir / <containerName> bash
  1. Docker 파일에서 이미지를 빌드하는 동안 필요한 파일 권한 등을 만드십시오.

  2. Linux 패키지에서 모든 패키지를 사용할 수있는 chpasswd경우 USER 유틸리티 앞의 dockerfile에서


실행중인 컨테이너의 쉘을 가져오고 루트 비밀번호를 변경하십시오.

docker exec -it <MyContainer> bash

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

--add-host NAME:IP컨테이너를 시작할 때 docker run에 인수를 제공하는 것이 더 나은 해결책이라고 제안합니다 . /etc/hosts/루트가 될 필요없이 파일을 업데이트합니다 .

그렇지 않으면에 플래그를 USER지정 하여 설정을 무시할 수 있습니다 . 그러나 실행중인 컨테이너에서 실제로 변경하지 않아야하기 때문에 이것에 대해 조언 할 것입니다. 대신 Dockerfile에서 변경하고 새 이미지를 만드십시오.-u USERdocker run


비밀번호는 'ubuntu'사용자의 경우 'ubuntu'입니다 (적어도 우분투의 경우 docker : 14.04.03).

NB : 컨테이너를 시작한 후에 'ubuntu'가 생성되므로, 이렇게하면

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

루트 프롬프트가 바로 나타납니다. 여기에서 root의 비밀번호 변경을 강제로 수행하고 컨테이너를 커밋하고 선택적으로 다음과 같이 ubuntu : latest에 태그를 태그 지정할 수 있습니다 (-f).

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

ubuntu : latest에 대한 최종 종속성을 다시 작성해야합니다.


루트 액세스 권한을 얻으려면 다음 명령을 시도하십시오

$ sudo -i 

Dockerfile에서 USER root 명령을 사용할 수 있습니다.


컨테이너를 시작하면 루트가되지만 루트의 비밀번호가 무엇인지 알 수 없습니다. 알고있는 것으로 설정하려면 "passwd root"를 사용하십시오. 컨테이너를 스냅 샷 / 커밋하여 작업을 저장합니다.

참고 URL : https://stackoverflow.com/questions/28721699/root-password-inside-a-docker-container

반응형