我正在尝试自定义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
答案 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"]