2017-10-17 2 views
0

도커 기반 빌드 환경이 있습니다. 프로젝트를 빌드하기 위해 --volume 매개 변수가있는 도커 컨테이너를 실행하여 프로젝트 디렉토리에 액세스하고 빌드 할 수 있습니다. .도커 컨테이너 만들기 호스트 컴퓨터에서 삭제할 수있는 파일 만들기

문제는 컨테이너에서 생성 된 파일을 호스트 시스템에서 삭제할 수 없다는 것입니다. 내가 현재 가지고있는 유일한 해결 방법은 디렉토리가 마운트 된 대화 형 컨테이너를 시작하고 삭제하는 것입니다.

결론 : 호스트가 나중에 삭제할 수있는 권한으로 마운트 된 영역 파일에 도커를 쓸 수 있습니까?

+0

'-e LOCAL_USER_ID = 'id -u $ USER''이 (가) 사용되는 컨테이너를 실행 하시겠습니까? – SomethingSomething

답변

1

이것은 Docker와 관련이 없으며 기본적인 Unix 파일 권한과 관련이 있습니다. 도커 컨테이너는 root으로 실행됩니다. 즉, 컨테이너에서 생성 된 모든 파일은 호스트의 root이 소유합니다. 이 문제는 다른 파일 사용 권한 문제를 해결하는 방법으로 해결됩니다. (a) 파일/디렉토리가 사용자 ID로 생성되도록하거나 (b) 권한이 파일을 삭제하지 않도록 할 수 있습니다 (c) 높은 권한 (예 : sudo rm ...)을 사용하여 파일을 삭제할 수 있습니다.

무엇을하고 있느냐에 따라 옵션 (a)을 쉽게 할 수 있습니다. 루트가 아닌 사용자로 contanier, 예컨대을 실행할 수있는 경우 :

docker run -u $UID -v $HOME/output:/some/container/path ... 

... 다음 모든 것 그냥 일, 파일이 사용자 ID로 생성되기 때문에.

컨테이너가 처음 root로 실행해야하는 경우, 당신은 당신의 ENTRYPOINT 또는 CMD 스크립트 root 행동을 돌봐하고 주요 응용 프로그램을 실행하기 위해 다른 UID로 전환 할 수 있습니다. 이렇게하려면, 당신은 (환경 변수로, 예를 들어) 컨테이너에 사용자 ID를 전달해야하고, 나중에 새로운 사용자 ID로 전환 runuser 같은 것을 사용하는 것이 :

exec runuser -u $TARGE_UID /some/command 

위의 어느 경우 옵션 인 경우 sudo rm -rf mydirectory은 대화 형 컨테이너를 회전시키는 것만큼이나 작동해야합니다.

+0

매우 상세하고 설명 된 답변에 감사드립니다! – SomethingSomething

0

빌드 아티팩트가 다음 스테이지의 고정 이미지에 배치되어야한다면 multi-stage build 옵션을 사용해야 할 것입니다.

관련 문제