2017-01-16 82 views
0

我正在嘗試更改Dockerfile上創建的文件夾persimisions以創建自定義elasticsearch圖像。從dockerfile chowning docker文件夾

我不明白爲什麼一旦圖像被拉出並且elasticsearch工作,文件夾權限保持不變。

我只是想在/usr/share/elasticsearch下創建一個backup文件夾。創建好後更改的權限:

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

我剛剛拿到了這個想法從official elasticsearch:2.4 dockerfile。我提出的片段:

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 

然而,backup被分配到root: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 +上下文來重新創建問題? – minamijoyo

+0

我剛剛添加了完整的Dokcerfile和backup.sh文件。 – Jordi

回答

1
VOLUME /usr/share/elasticsearch/backup 

你似乎將此目錄作爲卷掛載到您的容器中。當發生這種情況時,該卷的內容(包括目錄權限和任何包含的文件)將取代圖像提供的內容。您無法通過重建映像來更改現有卷的權限,因此在創建映像時未裝入卷。但是,如果您使用命名卷,則會使用此文件夾位置的圖像內容進行初始化。如果使用主機卷,則直接將主機路徑掛載到容器中,這將永遠是主機目錄的內容,而不需要任何初始化。

+0

謝謝@BMitch。我得到了你所提出的。不過,[elasticsearch dockerfile](https://github.com/docker-library/elasticsearch/blob/8f00ad520c1c33b879a715700905d3c25c526331/2.4/Dockerfile)中的/ usr/share/elasticsearch/data'文件夾呢?這是「chowning」這個文件夾,然後將其設置爲「VOLUME」。儘管如此:'drwxr-xr-x。 3 elasticsearch elasticsearch 4096 Jan 16 12:11 data'。有什麼方法可以實現我的目標嗎? (我已經編輯過這篇文章)。 – Jordi

+0

如果您可以展示如何運行這些容器,我將能夠提供更好的幫助。捲起容器時捲來自哪裏?您是使用主機還是命名卷,還是將其保留未設置?你是用碼頭組合來旋轉容器嗎? – BMitch