创建自定义文件夹并分配用户权限
Create a custom folder and assign user permission
我正在尝试自定义 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
你可以尝试直接运行命令:
RUN mkdir -p /data/local_data && chown -R abc:abc /data/local_data
您也可以尝试将您的 shebang 更改为:
#!/bin/bash
为了调试你可能会尝试set -x
在你的脚本中搞好。
编辑:
我在你的日志中注意到这个 Removing intermediate container
,解决它的方法是在你的 docker run
命令中使用卷:
-v /path/your/new/folder/HOST:/path/your/new/folder/container
您正在尝试修改在基本映像中指定为 VOLUME
的文件夹,但根据 Docker documentation on Volumes:
Changing the volume from within the Dockerfile: If any build steps
change the data within the volume after it has been declared, those
changes will be discarded.
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 "$@"
Docker 文件:
FROM linuxserver/nextcloud
# Copy the script and call it at entrypoint instead
COPY script /home/
ENTRYPOINT ["/home/script"]
我正在尝试自定义 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
你可以尝试直接运行命令:
RUN mkdir -p /data/local_data && chown -R abc:abc /data/local_data
您也可以尝试将您的 shebang 更改为:
#!/bin/bash
为了调试你可能会尝试set -x
在你的脚本中搞好。
编辑:
我在你的日志中注意到这个 Removing intermediate container
,解决它的方法是在你的 docker run
命令中使用卷:
-v /path/your/new/folder/HOST:/path/your/new/folder/container
您正在尝试修改在基本映像中指定为 VOLUME
的文件夹,但根据 Docker documentation on Volumes:
Changing the volume from within the Dockerfile: If any build steps change the data within the volume after it has been declared, those changes will be discarded.
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 "$@"
Docker 文件:
FROM linuxserver/nextcloud
# Copy the script and call it at entrypoint instead
COPY script /home/
ENTRYPOINT ["/home/script"]