创建一个自定义文件夹并分配用户权限

时间:2019-07-08 08:51:55

标签: docker dockerfile nextcloud

我正在尝试自定义Dockerfile,我只想创建一个文件夹并在新文件夹上分配用户(PID和GID)。

这是我完整的Dockerfile:

FROM linuxserver/nextcloud

COPY script /home/
RUN /home/script

脚本文件的内容:

#!/bin/sh
mkdir -p /data/local_data
chown -R abc:abc /data/local_data

我授予他以下许可:chmod +x script

此刻它还没有创建文件夹,并且我在日志中看不到错误。

运行容器的命令:

docker run -d \
  --name=nextcloud \
  -e PUID=1000 \
  -e PGID=1000 \
  -e TZ=Europe/Paris \
  -p 443:443 \
  -p 8080:80 \
  -v /home/foouser/nextcloud:/config \
  -v /home/foouser/data:/data \
  --restart unless-stopped \
  nextcloud_custom

构建日志:

Step 1/3 : FROM linuxserver/nextcloud
 ---> d1af592649f2
Step 2/3 : COPY script /home/
 ---> 0b005872bd3b
Step 3/3 : RUN /home/script
 ---> Running in 9fbd3f9654df
Removing intermediate container 9fbd3f9654df
 ---> 91cc65981944
Successfully built 91cc65981944
Successfully tagged nextcloud_custom:latest

2 个答案:

答案 0 :(得分:1)

您可以尝试直接运行命令:

RUN mkdir -p /data/local_data && chown -R abc:abc /data/local_data

您还可以尝试将您的shebang破坏为:

#!/bin/bash

要调试,您可以尝试在脚本中set -x

编辑:

我在您的日志中注意到了这个Removing intermediate container,解决方案是通过您的docker run命令使用volume:

-v /path/your/new/folder/HOST:/path/your/new/folder/container

答案 1 :(得分:1)

您正试图修改在基础映像中指定为VOLUME的文件夹,但要按照Docker documentation on Volumes进行操作:

  

在Dockerfile中更改卷:如果有构建步骤   在声明后更改卷中的数据,   更改将被丢弃。

linuxserver/nextcloud确实声明了一个卷/data,之后您要尝试更改它,就像这样做:

VOLUME /data
...
RUN mkdir -p /data/local_data

创建的目录将被丢弃。不过,您可以在容器启动时通过修改其入口点来创建目录,以便在容器启动时创建目录。当前linuxserver/nextcloud使用/init作为入口点,因此您可以执行以下操作:

您的脚本内容,然后将其定义为入口点:

#!/bin/sh
mkdir -p /data/local_data
chown -R abc:abc /data/local_data

# Call the base image entrypoint with parameters
/init "$@"

Dockerfile:

FROM linuxserver/nextcloud

# Copy the script and call it at entrypoint instead
COPY script /home/
ENTRYPOINT ["/home/script"]