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
'developer tip' 카테고리의 다른 글
UICollectionView : nil이 아닌 레이아웃 매개 변수로 초기화되어야합니다. (0) | 2020.12.29 |
---|---|
다중 반응 열을 수행 할 때 행 지우기-부트 스트랩 (0) | 2020.12.29 |
프로그래밍 방식으로 툴바에 대한 app : layout_scrollFlags를 설정하는 방법 (0) | 2020.12.29 |
v4.Fragment에서 런타임 권한을 요청하고 콜백이 Fragment로 이동합니까? (0) | 2020.12.29 |
새로 고침시 redux 상태 트리를 유지하려면 어떻게해야합니까? (0) | 2020.12.29 |