USER 명령을 사용하여 빌드 된 Docker 이미지를 루트가 아닌 사용자를 사용하고 dev
있습니다. 컨테이너 내에서 “dev”이지만 /etc/hosts
파일 을 편집하고 싶습니다 .
그래서 나는 뿌리가되어야합니다. su 명령을 시도하고 있지만 루트 암호를 입력하라는 메시지가 표시됩니다.
Docker 컨테이너 내부의 기본 루트 사용자 비밀번호는 무엇입니까?
답변
-u
옵션 을 사용할 때 제공된 기본 사용자 대신 루트 사용자 (ID = 0)를 사용하여 Docker 컨테이너에 로그인 할 수 있습니다 . 예 :
docker exec -u 0 -it mycontainer bash
루트 (id = 0)는 컨테이너 내의 기본 사용자입니다. 이미지 개발자는 추가 사용자를 만들 수 있습니다. 해당 사용자는 이름으로 액세스 할 수 있습니다. 숫자 ID를 전달할 때 사용자는 컨테이너에 없어도됩니다.
답변
결국 Docker 이미지를 다시 작성하기로 결정하여 내가 아는 것으로 루트 암호를 변경했습니다.
RUN echo 'root:Docker!' | chpasswd
또는
RUN echo 'Docker!' | passwd --stdin root
답변
몇 가지 방법이 있습니다.
-
Docker를 실행하여 USER 설정을 재정의하려면
docker exec -u 0 -it containerName bash
또는
docker exec -u root -it --workdir / <containerName> bash
-
Docker 파일에서 이미지를 빌드하는 동안 필요한 파일 권한 등을 만드십시오.
-
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: