IT TIP

Dockerfile에서 chown이 작동하지 않는 이유는 무엇입니까?

itqueen 2020. 12. 11. 21:08
반응형

Dockerfile에서 chown이 작동하지 않는 이유는 무엇입니까?


내 Dockerfile은 디렉터리를 생성하고 그 디렉터리를 선택한 다음 나중에 디렉터리를 나열합니다. 디렉토리는 여전히 루트 소유입니다. 왜 그런 겁니까?

다음은 Dockerfile입니다.

FROM ubuntu:precise
RUN useradd -d /home/testuser -m -s /bin/bash testuser
RUN mkdir -p /var/local/testrunner/logs
VOLUME ["/var/local/testrunner/logs"]
RUN grep testuser /etc/passwd
RUN grep root /etc/passwd
RUN chown -R testuser:testuser /var/local/testrunner/logs
RUN ls -ld /var/local/testrunner/logs 

다음은 "docker build"의 출력입니다.

Sending build context to Docker daemon 10.24 kB
Sending build context to Docker daemon 
Step 0 : FROM ubuntu:precise
 ---> ab8e2728644c
Step 1 : RUN useradd -d /home/testuser -m -s /bin/bash testuser
 ---> Using cache
 ---> 640f12671c86
Step 2 : RUN mkdir -p /var/local/testrunner/logs
 ---> Using cache
 ---> bf7756fd5b1f
Step 3 : VOLUME ["/var/local/testrunner/logs"]
 ---> Using cache
 ---> 65c73ee76c20
Step 4 : RUN grep testuser /etc/passwd
 ---> Using cache
 ---> db72fff0b965
Step 5 : RUN grep root /etc/passwd
 ---> Running in ebff78df7a9a
root:x:0:0:root:/root:/bin/bash
 ---> ead0ff704a59
Removing intermediate container ebff78df7a9a
Step 6 : RUN chown -R testuser:testuser /var/local/testrunner/logs
 ---> Running in c925f67b2ab4
 ---> 253132be935e
Removing intermediate container c925f67b2ab4
Step 7 : RUN ls -ld /var/local/testrunner/logs
 ---> Running in 978bc66aa47e
drwxr-xr-x 2 root staff 4096 Oct  1 15:15 /var/local/testrunner/logs

Docker 버전 1.2.0, 빌드 fa7b24f

호스트는 Ubuntu 12.04를 실행하지만 3.13.0-36 일반 커널을 사용합니다.


내 질문에 답하기 : 그것은 볼륨으로 선언되었습니다. VOLUME 명령을 꺼내면 chown이 적용됩니다.

또한 chown 실행 한 후 볼륨을 선언 하면 chown 설정이 그대로 유지됩니다.


이 블로그 http://container42.com/2014/11/03/docker-indepth-volumes/에서는 이 동작에 대해 자세히 설명합니다.

Dockerfile의 각 명령어는 새 컨테이너를 만듭니다. 명령은이 컨테이너를 일부 변경하고 새 레이어가됩니다. 실제 컨테이너 파일 시스템에 VOLUME 명령이 적용되기 전에 "/ var / local / testrunner / logs"에 대한 변경 사항이 적용되었습니다. 그러나 VOLUME 명령 이후 "/ var / local / testrunner / logs"디렉토리가 마운트 된 디렉토리입니다. VOLUME 명령 후이 디렉토리에 대한 변경 사항은 실제 컨테이너 파일 시스템이 아닌 마운트 된 디렉토리에 적용됩니다.


내 경험상 chown루트 ( VOLUME /test)에 마운트 할 때 작동하지 않습니다 . 루트가 아닌 위치 ( VOLUME /var/test)를 사용하십시오 .

참고 URL : https://stackoverflow.com/questions/26145351/why-doesnt-chown-work-in-dockerfile

반응형