Docker 컨테이너 내부의 루트 비밀번호
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
아래 명령으로 작동시킬 수 있습니다.
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를 실행하여 USER 설정을 재정의하려면
docker exec -u 0 -it containerName bash
또는
docker exec -u root -it --workdir / <containerName> bash
Docker 파일에서 이미지를 빌드하는 동안 필요한 파일 권한 등을 만드십시오.
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 USER
docker 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
'Programming' 카테고리의 다른 글
PHP에서 경고 메시지 제거 (0) | 2020.05.07 |
---|---|
Visual Studio 2015 vshub는 스팸 피들러입니다. (0) | 2020.05.07 |
Linux에서 출력 라인 당 하나의 파일 이름을 어떻게 나열합니까? (0) | 2020.05.07 |
Android Check 인터넷 연결 (0) | 2020.05.07 |
Jackson 열거 형 직렬화 및 DeSerializer (0) | 2020.05.07 |