chowning una cartella docker dal file dockerfile

Sto cercando di modificare una persecuzione di una cartella appena creata su Dockerfile per creare un'image elastica di ricerca personalizzata.

Non capisco perché una volta che l'image sia stata tirata e che la ricerca elastica sta funzionando, le autorizzazioni per le cartelle continuano senza modifiche.

Sto solo cercando di creare una cartella di backup sotto /usr/share/elasticsearch . Una volta creata, modifico le autorizzazioni:

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

where il contenuto del file backup.sh è:

 mkdir backup chown -R elasticsearch:elasticsearch ./backup 

backup cartella di backup viene creata in /usr/share/elasticsearch , tuttavia le sue autorizzazioni rimangono invariate:

 #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 

Qualche idea?

EDIT

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

Ho appena avuto l'idea da elasticità ufficiale: 2.4 file dockerfile . Pongo il frammento:

 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 

Ho anche provato questo:

 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 

Tuttavia, il backup è assegnato a root:root invece di 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 

 VOLUME /usr/share/elasticsearch/backup 

Sembra che stai montando questa directory come un volume nel tuo contenitore. Quando ciò accade, il contenuto di quel volume, inclusi i permessi della directory e dei file contenuti, sostituirà quello fornito dall'image. Non è ansible modificare le autorizzazioni di un volume esistente ricostruendo l'image, il volume non viene montato durante la creazione dell'image. Tuttavia, se si utilizza un volume chiamato, verrà inizializzato con il contenuto dell'image in questa posizione della cartella. Se si utilizza un volume host, montando direttamente un path host nel contenitore, questo sarà sempre esattamente il contenuto della directory host senza alcuna initialization.