2016-09-19 3 views
3

루트가 아닌 사용자로 명명 된 볼륨을 마운트하는 방법이 있습니까? 각 Dockerfile에서 chown을 실행하지 않으려 고하지만 이미지에 빌드로 작성된 이슈를 쓸 수 있도록 root가 아닌 사용자가 쓸 수있는 마운트가 필요합니다.Docker에서 "named volume"을 비 루트로 마운트

이것은 내가 ' 시도 m은

docker run --rm -it -v /home/bob/dev/:/src/dev -v builds:/mnt/build --name build hilikus/build /bin/bash 

하지만 두 번째에 내가

[[email protected] ~]$ ll /mnt 
total 4 
drwxr-xr-x 2 root root 4096 Sep 18 19:29 build 

을 얻을 마운트

는 마운트 ( /src/dev/)는 사용자가 소유하지 루트 내가 필요한 것을 다른주는 나의 단계; 그러나, 나는 명명 된 볼륨과 동일한 작업을 수행 할 수 없었습니다.

답변

1

명명 된 볼륨이 해당 위치에 이미지의 내용을 초기화합니다, 그래서 당신은 당신의 Dockerfile 내부의 권한을 설정해야합니다 나는 당신으로 유사한 Dockerfile을했습니다,

$ cat df.vf-uid 
FROM busybox 
RUN mkdir -p /data && echo "hello world" > /data/hello && chown -R 1000 /data 

$ docker build -t test-vf -f df.vf-uid . 
Sending build context to Docker daemon 23.06 MB 
Step 1 : FROM busybox 
---> 2b8fd9751c4c 
Step 2 : RUN mkdir -p /data && echo "hello world" > /data/hello && chown -R 1000 /data 
---> Using cache 
---> 41390b132940 
Successfully built 41390b132940 

$ docker run -v test-vol:/data --rm -it test-vf ls -alR /data 
/data: 
total 12 
drwxr-xr-x 2 1000  root   4096 Sep 19 15:26 . 
drwxr-xr-x 19 root  root   4096 Sep 19 15:26 .. 
-rw-r--r-- 1 1000  root   12 Aug 22 11:43 hello 
+0

매우 이상한,하지만 난이 이 추가 지시 사항 인'VOLUME/data'는 여러분이 보여 주듯이'docker run'을 할 때 모든 것이'root' 소유권으로 되돌아갑니다 (또 다른 차이점은 시작시 볼륨이 비어 있다는 것입니다. 그래서 볼륨 폴더 만 변경합니다 소유권. – Huygens

+0

나는 우리가 여기서 말한 것처럼 "경적으로 황소를 데려 갔다!"Dockerfile에있는 문서를 간과했다. Dockerfile 내에서 볼륨 변경 : 빌드 단계가 볼륨의 데이터를 변경 한 후에 선언했다, 그 차 nges는 버려 질 것이다. "나는 단지 그것을 가지고 있었다! VOLUME 명령은 폴더를 만들고 사용 권한을 설정하기 전에 수행되었습니다. 그것은 단순히 폐기되었습니다. – Huygens

+1

@Huygens Dockerfile과 볼륨을 섞지 않는 것이 가장 좋습니다. 자세한 설명은 내 블로그 게시물을 참조하십시오.하지만 이미 큰 문제 중 하나에 휩싸여 있습니다. https://boxboat.com/2017/01/23/volumes-and-dockerfiles-dont-mix/ – BMitch

관련 문제