Docker에서 컨테이너 내부에 생성 된 파일은 호스트에서 검사하는 동안 예측할 수없는 소유권을 갖는 경향이 있습니다. 볼륨에있는 파일의 소유자는 기본적으로 루트 (uid 0)이지만 루트가 아닌 사용자 계정이 컨테이너에 포함되어 파일 시스템에 쓰는 즉시 소유자는 호스트 관점에서 다소 무작위가됩니다.
docker 명령을 호출하는 동일한 사용자 계정을 사용하여 호스트에서 볼륨 데이터에 액세스해야하는 경우 문제가됩니다.
일반적인 해결 방법은 다음과 같습니다.
- Dockerfiles (이식 불가능)에서 생성시 사용자 uID 강제
- 호스트 사용자의 UID를
docker run
환경 변수로 명령에 전달한 다음chown
진입 점 스크립트의 볼륨에서 일부 명령 을 실행 합니다.
두 솔루션 모두 컨테이너 외부의 실제 권한을 제어 할 수 있습니다.
사용자 네임 스페이스가이 문제에 대한 최종 해결책이 될 것으로 예상했습니다. 최근에 출시 된 버전 1.10 및 --userns-remap을 내 데스크톱 계정으로 설정하여 몇 가지 테스트를 실행했습니다. 그러나 마운트 된 볼륨에 대한 파일 소유권을 더 쉽게 처리 할 수 있는지 확신 할 수 없으며 실제로 그 반대 일 수 있습니다.
이 기본 컨테이너를 시작한다고 가정합니다.
docker run -ti -v /data debian:jessie /bin/bash
echo 'hello' > /data/test.txt
exit
그런 다음 호스트의 콘텐츠를 검사합니다.
ls -lh /var/lib/docker/100000.100000/volumes/<some-id>/_data/
-rw-r--r-- 1 100000 100000 6 Feb 8 19:43 test.txt
이 숫자 '100000'은 내 호스트 사용자의 하위 UID이지만 내 사용자의 UID와 일치하지 않기 때문에 권한없이 test.txt를 편집 할 수 없습니다. 이 하위 사용자는 docker 외부의 실제 일반 사용자와 친화력이없는 것 같습니다. 다시 매핑되지 않았습니다.
호스트와 컨테이너 간의 UID 정렬로 구성된이 게시물의 앞부분에서 언급 한 해결 방법 UID->sub-UID
은 네임 스페이스에서 발생 하는 매핑 으로 인해 더 이상 작동하지 않습니다 .
그렇다면 사용자 네임 스페이스가 활성화 된 상태에서 (보안 향상을 위해) docker를 실행하는 방법이있는 반면, docker를 실행하는 호스트 사용자가 볼륨에서 생성 된 파일을 소유 할 수 있도록하는 방법이 있습니까?