Что касается определения томов, то согласно this кажется, что вы должны объявить их, как вы описали в своем обновленном вопросе.
Существует общее мнение, что / var / www / html / modules, / var / www / html / profile и / var / www / html / themes - это вещи, которые обычно должны быть томами (и могут иметь явное объявление VOLUME в будущем обновлении этого изображения), но обработка / var / www / html / sites будет несколько более сложной, поскольку содержимое этого каталога необходимо инициализировать с содержимым из изображения.
Таким образом, вам необходимо определить каждый путь как том отдельно, либо в локальном каталоге, либо с использованием именованных томов, например:
docker run --name some-drupal --network some-network -d \
-v /path/on/host/modules:/var/www/html/modules \
-v /path/on/host/profiles:/var/www/html/profiles \
-v /path/on/host/sites:/var/www/html/sites \
-v /path/on/host/themes:/var/www/html/themes \
drupal
Что касается проблемы с разрешениями, это связано с тем, что контейнер меняет владельца и группу на www-data
, как показано в здесь , который может использовать другой UID / GID, чем ваш фактический пользователь хоста. Из докер-файла друпала:
RUN curl -fSL "https://ftp.drupal.org/files/projects/drupal-${DRUPAL_VERSION}.tar.gz" -o drupal.tar.gz \
&& echo "${DRUPAL_MD5} *drupal.tar.gz" | md5sum -c - \
&& tar -xz --strip-components=1 -f drupal.tar.gz \
&& rm drupal.tar.gz \
&& chown -R www-data:www-data sites modules themes
Что вы можете сделать, это установить правила ACL с вашего хоста для файлов drupal, например, как показано ниже, чтобы вы могли редактировать и изменять файлы во время разработки (при условии, что ваше имя пользователя dale ):
sudo setfacl -Rm u:dale:rwx,d:u:dale:rwx /path/to/drupal/files
И, конечно, если вы создаете файл вручную с хоста, вам нужно дать ему надлежащее разрешение, чтобы веб-сервер мог получить к нему доступ (при условии, что www-data uid равен 33, а gid равен 33), выполнив следующую команду:
sudo chown 33:33 /path/to/drupla/files_or_directories/ -R