Создайте пользовательскую папку и назначьте права пользователя - PullRequest
0 голосов
/ 08 июля 2019

Я пытаюсь настроить 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 ]

1 голос
/ 08 июля 2019

Вы пытаетесь изменить папку, которая указана как VOLUME в базовом образе, но согласно документации Docker для томов :

Изменение громкости св 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"]   
1 голос
/ 08 июля 2019

вы можете попробовать запустить команды напрямую:

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

Вы также можете попробовать изменить свой шебанг на:

#!/bin/bash

для отладки вы можете попробовать set -x в вашем скрипте скважину.

EDIT:

Я заметил это Removing intermediate container в ваших журналах, решение было бы использовать том с вашей командой docker run:

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