从dockerfile中调用docker文件夹

我正在尝试更改Dockerfile上刚刚创build的文件夹persimches以创build自定义elasticsearch图像。

我不太明白为什么一旦图像被拉出,elasticsearch正在工作,文件夹权限保持不变。

我只是试图在/usr/share/elasticsearch下创build一个backup文件夹。 一旦创build,我更改权限:

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

其中backup.sh文件的内容是:

 mkdir backup chown -R elasticsearch:elasticsearch ./backup 

backup文件夹在/usr/share/elasticsearch下创build,但其权限保持不变:

 #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

我刚刚从官方的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 

 VOLUME /usr/share/elasticsearch/backup 

您似乎将此目录作为卷挂载到您的容器中。 当发生这种情况时,该卷的内容(包括目录权限和任何包含的文件)将取代图像提供的内容。 您无法通过重build映像来更改现有卷的权限,因此在创build映像时未装入卷。 但是,如果您使用命名卷,则会使用此文件夹位置的图像内容进行初始化。 如果使用主机卷,则将主机path直接挂载到容器中,这将永远是主机目录的内容,而不需要任何初始化。