[docker] 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


답변

몇 가지 방법이 있습니다.

  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에서


답변

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

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


답변

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

docker exec -it <MyContainer> bash

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