Docker COPY를 루트가 아닌 것으로 어떻게 복사합니까?


142

Docker 이미지를 빌드하는 동안 COPY결과 파일이 루트 이외의 사용자가 소유하도록 이미지에 파일을 어떻게 배치합니까 ?

답변:


205

버전 v17.09.0-ce 이상

또는 옵션 --chown=<user>:<group>과 함께 옵션 플래그 를 사용하십시오 .ADDCOPY

예를 들어

COPY --chown=<user>:<group> <hostPath> <containerPath>

--chown 플래그에 대한 문서는 이제 기본 Dockerfile 참조 페이지에 있습니다.

문제 34263 이 병합되어 릴리스 v17.09.0-ce 에서 사용할 수 있습니다 .


v17.09.0-ce 이전 버전의 경우

Docker는 COPY루트 이외의 사용자로는 지원하지 않습니다 . 당신은 필요 chown/ chmod파일 COPY 명령.

Dockerfile 예 :

from centos:6
RUN groupadd -r myuser && adduser -r -g myuser myuser
USER myuser
#Install code, configure application, etc...
USER root
COPY run-my-app.sh /usr/local/bin/run-my-app.sh
RUN chown myuser:myuser /usr/local/bin/run-my-app.sh && \
    chmod 744 /usr/local/bin/run-my-app.sh
USER myuser
ENTRYPOINT ["/usr/local/bin/run-my-app.sh"]

v17.09.0-ce 이전의 COPY명령에 대한 Dockerfile Reference는 다음과 같이 말했습니다.

모든 새 파일과 디렉토리는 UID와 GID가 0으로 작성됩니다.


역사 이 기능은 여러 GitHub의 문제를 추적하고있다 : 6119 , 9943 , 13600 , 27303 , 28499 , 문제 30110 .

문제 34263 은 선택적 플래그 기능을 구현 한 문제이며 문제 467 은 설명서를 업데이트했습니다.


3
overlay2가 기본 스토리지 드라이버가 되었기 때문에 많은 파일을 꽉 채우는 것이 엄청나게 느려졌 기 때문에 이는
실망 스럽습니다.

1
그러나 명백한 이유없이 큰 추가 이미지 레이어를 만듭니다 (제 경우에는 chown40MB의 파일 에서 실행하는 경우> 300MB ).
Dirk

크기 축소 인 COPY 명령과 함께 chown을 실행하면 한 가지 이점이 있습니다. 이 두 명령을 별도로 실행하면 (COPY <host_path> <source_path>; chown other_user : other_user) 이미지 크기를 두 배로 늘리는 하나의 추가 레이어가 만들어집니다.
abhishek thakur

이 답변은 생명의 은인입니다. 정말 고마워 몇 시간 동안 싸우고 있던 문제를 해결했습니다.
콜비 힐
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.