답변:
-u옵션 을 사용할 때 제공된 기본 사용자 대신 루트 사용자 (ID = 0)를 사용하여 Docker 컨테이너에 로그인 할 수 있습니다 . 예 :
docker exec -u 0 -it mycontainer bash
루트 (id = 0)는 컨테이너 내의 기본 사용자입니다. 이미지 개발자는 추가 사용자를 만들 수 있습니다. 해당 사용자는 이름으로 액세스 할 수 있습니다. 숫자 ID를 전달할 때 사용자는 컨테이너에 없어도됩니다.
docker run -u 0 -it mycontainer bash
결국 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에서
컨테이너에서 권한이없는 사용자로 실행 중이기 때문에 루트로 전환 할 수 없다는이 문제가있었습니다.
그러나 이전 답변에서 제안한대로 새 이미지를 다시 만들고 싶지 않았습니다.
대신 '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
sudo nsenter --target <PID> --mount --uts --ipc --net --pid
docker exec -u 0 -it containername bash
비밀번호는 '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에 대한 최종 종속성을 다시 작성해야합니다.
--add-host NAME:IP컨테이너를 시작할 때 docker run에 인수를 제공하는 것이 더 나은 해결책이라고 제안합니다 . /etc/hosts/루트가 될 필요없이 파일을 업데이트합니다 .
그렇지 않으면에 플래그를 USER지정 하여 설정을 무시할 수 있습니다 . 그러나 실행중인 컨테이너에서 실제로 변경하지 않아야하기 때문에 이것에 대해 조언 할 것입니다. 대신 Dockerfile에서 변경하고 새 이미지를 만드십시오.-u USERdocker run
-u플래그를 사용하여 사용자를 변경할 수 있습니다 . 컨테이너 내부에서 할 수 있다고 생각하지 않습니다.
기본적으로 도커 컨테이너는 root 사용자 .
여전히 컨테이너를 사용하는 경우 exit명령을 사용 하여root 하여 컨테이너를 다시 실행하는 대신 (기본 사용자) 사용자로 .
예 -
[dev@6c4c86bccf93 ~]$ ls
[dev@6c4c86bccf93 ~]$ other-commands..
[dev@6c4c86bccf93 ~]$ exit
[root@6c4c86bccf93 /]# ls
루트 액세스 권한을 얻으려면 다음 명령을 시도하십시오
$ sudo -i
경우에 따라 사용자와 같은 작업을 수행 할 수 있어야합니다 sudo(예 : 컨테이너에서 실행중인 응용 프로그램이 사용자에게 셸을 제공함). Dockerfile에 간단히 추가하십시오.
RUN apt-get update # If necessary
RUN apt-get install sudo # If your base image does not contain sudo.
RUN useradd -m -N -s /bin/bash -u 1000 -p '$1$miTOHCYy$K.c4Yw.edukWJ7z9rbpTZ0' user && \
usermod -aG sudo user # Grant sudo to the user
USER user
이제 기본 이미지 사용자 에서 라인 3에 설정된 비밀번호 user를 사용할 수 있습니다 sudo.
docker exec -u 0 -it mycontainer bash. (H6의 답변 참조 )