답변:
-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 USER
docker 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
의 답변 참조 )