2017-01-16 46 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