2017-01-16 1 views
0

사용자 정의 elasticsearch 이미지를 만들기 위해 Dockerfile에서 방금 생성 된 폴더 persimisions를 변경하려고합니다.dockerfile에서 docker 폴더 chowning

일단 이미지를 가져오고 elasticsearch가 작동하면 폴더 권한이 변경되지 않는 이유를 알 수 없습니다.

backup 폴더를 /usr/share/elasticsearch 아래에 만들려고합니다.

COPY ./backup.sh . 
RUN ["chmod", "+x", "./backup.sh"] 
CMD ["./backup.sh"] 

backup.sh 파일 내용은 다음과 같습니다 :이 만들어 일단 내가 권한 변경

mkdir backup 
chown -R elasticsearch:elasticsearch ./backup 

backup 폴더가 /usr/share/elasticsearch에서 만들어집니다, 그럼에도 불구하고, 그 권한은 그대로 유지 :

#docker exec -it es ls -la /usr/share/elasticsearch 
drwxr-xr-x. 1 root   root   4096 Jan 16 12:11 . 
drwxr-xr-x. 1 root   root   4096 Aug 31 17:30 .. 
drwxr-xr-x. 2 >>>>root<<<< >>>>root<<<< 4096 Jan 16 12:03 backup <<<<<<<<<<<<<<<<< 
-rwxr-xr-x. 1 root   root   58 Jan 16 12:02 backup.sh 
drwxr-xr-x. 2 root   root   4096 Jan 16 12:11 bin 
drwxr-xr-x. 3 elasticsearch elasticsearch 4096 Jan 16 12:11 config 
drwxr-xr-x. 3 elasticsearch elasticsearch 4096 Jan 16 12:11 data 
drwxr-xr-x. 2 root   root   4096 Jan 16 12:11 lib 
drwxr-xr-x. 2 elasticsearch elasticsearch 4096 Aug 31 17:30 logs 
drwxr-xr-x. 5 root   root   4096 Jan 16 12:11 modules 
drwxr-xr-x. 2 elasticsearch elasticsearch 4096 Aug 29 09:24 plugins 

어떤 아이디어 ?

편집

Dockerfile :

FROM elasticsearch:2.4 

COPY ./backup.sh . 
RUN ["chmod", "+x", "./backup.sh"] 
CMD ["./backup.sh"] 

VOLUME /usr/share/elasticsearch/backup 

backup.sh : 그냥에서 생각이있어

mkdir backup 
chown -R elasticsearch:elasticsearch ./backup 

EDIT2. 이 시도했습니다 I

WORKDIR /usr/share/elasticsearch 

RUN set -ex \ 
    && for path in \ 
     ./data \ 
     ./logs \ 
     ./config \ 
     ./config/scripts \ 
    ; do \ 
     mkdir -p "$path"; \ 
     chown -R elasticsearch:elasticsearch "$path"; \ 
done 

VOLUME /usr/share/elasticsearch/data 

: 그러나

WORKDIR /usr/share/elasticsearch 

RUN set -ex \ 
    && for path in \ 
     ./backup \ 
    ; do \ 
     mkdir -p "$path"; \ 
     chown -R elasticsearch:elasticsearch "$path"; \ 
done 

VOLUME /usr/share/elasticsearch/backup 

backuproot:root 대신 elasticsearch:elasticsearch의에 할당됩니다

#docker exec -it es ls -la /usr/share/elasticsearch 
drwxr-xr-x. 10 root   root   4096 Jan 17 08:02 . 
drwxr-xr-x. 51 root   root   4096 Aug 31 17:30 .. 
drwxr-xr-x. 2 root   root   4096 Jan 17 08:06 backup <<<<<<<<<<<< 
drwxr-xr-x. 2 root   root   4096 Jan 17 08:08 bin 
drwxr-xr-x. 3 elasticsearch elasticsearch 4096 Jan 17 08:08 config 
drwxr-xr-x. 3 elasticsearch elasticsearch 4096 Jan 17 08:08 data 
drwxr-xr-x. 2 root   root   4096 Jan 17 08:08 lib 
drwxr-xr-x. 2 elasticsearch elasticsearch 4096 Aug 31 17:30 logs 
drwxr-xr-x. 5 root   root   4096 Jan 17 08:08 modules 
drwxr-xr-x. 2 elasticsearch elasticsearch 4096 Aug 29 09:24 plugins 
+2

문제를 재현 할 수있는 샘플 Dockerfile + context를 제공 할 수 있습니까? – minamijoyo

+0

방금 ​​Dokcerfile 및 backup.sh 파일을 모두 추가했습니다. – Jordi

답변

1
VOLUME /usr/share/elasticsearch/backup 

당신은에 표시 나는 조각 포즈 이 디렉토리를 볼륨으로 컨테이너에 마운트하십시오. 그렇게되면 디렉토리 및 포함 된 파일의 사용 권한을 포함하여 해당 볼륨의 내용이 이미지에서 제공하는 내용을 대체합니다. 이미지를 다시 작성하면 기존 볼륨의 사용 권한을 변경할 수 없으며 볼륨은 이미지를 만드는 동안 탑재되지 않습니다. 그러나 명명 된 볼륨을 사용하면이 폴더 위치의 이미지 내용으로 초기화됩니다. 컨테이너에 호스트 경로를 직접 마운트하는 호스트 볼륨을 사용하는 경우 이는 초기화없이 항상 호스트 디렉토리의 내용이됩니다.

+0

감사합니다. @BMitch. 나는 네가 제기 한 것을 얻었다. 그럼에도 불구하고 [elasticsearch dockerfile]의/usr/share/elasticsearch/data' 폴더 (https://github.com/docker-library/elasticsearch/blob/8f00ad520c1c33b879a715700905d3c25c526331/2.4/Dockerfile)의 경우는 어떨까요? 이 폴더를'chowning '한 다음'VOLUME'으로 설정합니다. 그럼에도 불구하고 :'drwxr-xr-x. 3 elasticsearch elasticsearch 4096 1 월 16 일 12시 11 분 데이터'. 내 목표를 달성 할 수있는 방법이 있습니까? (나는 그 포스트를 다시 편집했다). – Jordi

+0

이 컨테이너를 어떻게 운영하는지 보여줄 수 있다면 더 잘 도와 줄 수 있습니다.컨테이너를 뽑을 때 나오는 볼륨은 어디에 있습니까? 호스트 또는 명명 된 볼륨을 사용하고 있습니까? 그리고 docker-compose를 사용하여 컨테이너를 회전시키고 있습니까? – BMitch

관련 문제