developer tip

Docker 복사 및 소유자 변경

copycodes 2020. 12. 29. 07:21
반응형

Docker 복사 및 소유자 변경


다음 Dockerfile이 주어지면

FROM ubuntu
RUN groupadd mygroup
RUN useradd -ms /bin/bash -G mygroup john
MKDIR /data
COPY test/ /data/test data
RUN chown -R john:mygroup /data
CMD /bin/bash

복사 된 테스트 디렉토리에서 파일 권한을 770으로 설정했습니다.

su john컨테이너 내부를 수행하면 테스트 디렉터리의 파일이나 하위 디렉터리에 액세스 할 수 없습니다. 이 문제는 복사 된 디렉토리가 여전히 루트 소유이고 권한이 770으로 설정된 aufs 파일 시스템의 소유권과 관련이있는 것 같습니다.

권한을 올바르게 설정하기위한이 문제에 대한 해결 방법이 있습니까? 하나는 복사하기 전에 원래 디렉토리의 권한을 컨테이너 사용자의 uid로 설정하는 것입니다. 그러나 이것은 해킹처럼 보입니다.


--chown플래그가 마지막에 추가되었습니다 COPY:

COPY --chown=patrick hostPath containerPath

이 새로운 구문은 Docker 17.09에서 작동하는 것 같습니다.

자세한 내용 은 PR 을 참조하십시오.


나는 해결책을 찾았다 고 생각합니다. 데이터 볼륨 컨테이너를 사용하면 문제가 해결됩니다. 먼저 외부 디렉터리의 복사본을 포함하는 데이터 볼륨 컨테이너를 만듭니다.

FROM busybox
RUN mkdir /data
VOLUME /data
COPY /test /data/test
CMD /bin/sh

내 사용자가있는 내 애플리케이션 컨테이너에서 다음과 같이 보일 수 있습니다.

FROM ubuntu
RUN groupadd mygroup
RUN useradd -ms /bin/bash -G mygroup john
COPY setpermissions.sh /root/setpermissions.sh
CMD /root/setpermissions.sh && /bin/bash

setpermissions 스크립트는 사용자 권한 설정 작업을 수행합니다.

#!/bin/bash

if [ ! -e /data/.bootstrapped ] ; then
  chown -R john:mygroup /data
  touch /data/.bootstrapped
fi

이제 --volumes-from <myDataContainerId>응용 프로그램 컨테이너를 실행할 때 를 사용해야합니다 .


파일을 원할 때마다 복사하는 데 /tmp/사용 RUN cp하는 것보다 임시 디렉토리 (예 :) 에 복사합니다.

COPY myfile /tmp/
RUN cp -r /tmp/myfile /target/path/

참조 URL : https://stackoverflow.com/questions/28879364/docker-copy-and-change-owner

반응형