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

Docker 创建自定义文件夹并分配用户权限,docker,dockerfile,nextcloud,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脚本 现在它没有创建文件夹,我在日志中没

我正在尝试自定义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脚本

现在它没有创建文件夹,我在日志中没有看到任何错误

运行容器的命令:

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

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

RUN mkdir -p /data/local_data && chown -R abc:abc /data/local_data
您也可以尝试将您的shebang更改为:

#!/bin/bash
要进行调试,您可以尝试在脚本中设置-x

编辑:

我已经注意到在日志中删除中间容器的
,解决方法是在
docker run
命令中使用volume:

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

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

RUN mkdir -p /data/local_data && chown -R abc:abc /data/local_data
您也可以尝试将您的shebang更改为:

#!/bin/bash
要进行调试,您可以尝试在脚本中设置-x

编辑:

我已经注意到在日志中删除中间容器的
,解决方法是在
docker run
命令中使用volume:

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

您正试图修改在基本映像中指定为
卷的文件夹,但根据:

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

声明一个卷
/data
,然后尝试更改该卷,就像执行以下操作:

VOLUME /data
...
RUN mkdir -p /data/local_data
创建的目录将被丢弃。但是,您可以在容器启动时创建目录,方法是修改其入口点,以便在容器启动时创建目录。当前使用
/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"]   

您正试图修改在基本映像中指定为
卷的文件夹,但根据:

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

声明一个卷
/data
,然后尝试更改该卷,就像执行以下操作:

VOLUME /data
...
RUN mkdir -p /data/local_data
创建的目录将被丢弃。但是,您可以在容器启动时创建目录,方法是修改其入口点,以便在容器启动时创建目录。当前使用
/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"]   


我尝试直接运行这些命令,但得到了相同的结果,这是一个多阶段Dockerfile吗?你可以发布你的Dockerfile吗?这是我使用的基本图像的来源。我还在脚本中添加了调试模块,它没有输出错误。我的问题中的Dockerfile是我的完整代码这并没有解决最初的问题,这是一个卷处理问题,尽管您提出的解决方案确实提供了结果我尝试直接运行命令,我得到了相同的结果它是一个多阶段Dockerfile吗?你可以发布你的Dockerfile吗?这是我使用的基本图像的来源。我还在脚本中添加了调试模块,它没有输出错误。我问题中的Dockerfile是我的完整代码这并不能解决原始问题,即卷处理问题,虽然您提出的解决方案确实提供了结果,但我脑子里有这个解决方案,但我需要将我的主机的卷映射到本地。\u dataLinSel解决方案就是您要找的:)谢谢您的回答,但我现在的应用程序有一些问题。我不能删除文件夹如果你愿意,你可以再问一个问题,你可以在评论中标记我,我很乐意帮忙谢谢@Pierre的支持,我会尝试先解决:)我脑子里有这个解决方案,但我需要将我的主机的卷映射到本地。\u dataLinSel解决方案就是你要找的:)谢谢你的回答,但我的应用程序现在有一些问题。我无法删除文件夹如果您愿意,您可以创建另一个问题,您可以在评论中标记我,我很乐意提供帮助感谢@Pierre的支持我将尝试找出是否可以首先解决:)