Wordpress на Docker: не удалось создать каталог на смонтированном томе

Вот исходные файлы в контейнере Wordpress Docker по пути /var/www/html:

$ docker exec 5b957c7b9c5ad054883694afbfb80d3c9df6707458d55011f471be0701f3890c ls -l
total 192
-rw-r--r--  1 www-data www-data   418 Sep 25  2013 index.php
-rw-r--r--  1 www-data www-data 19935 Jan  2 18:51 license.txt
-rw-r--r--  1 www-data www-data  7433 Jan 11 17:46 readme.html
-rw-r--r--  1 www-data www-data  5447 Sep 27  2016 wp-activate.php
drwxr-xr-x  9 www-data www-data  4096 May 16 21:50 wp-admin
-rw-r--r--  1 www-data www-data   364 Dec 19  2015 wp-blog-header.php
-rw-r--r--  1 www-data www-data  1627 Aug 29  2016 wp-comments-post.php
-rw-r--r--  1 www-data www-data  2764 May 29 22:19 wp-config-sample.php
-rw-r--r--  1 www-data www-data  3148 May 29 22:19 wp-config.php
drwxr-xr-x  4 www-data www-data  4096 May 16 21:50 wp-content
-rw-r--r--  1 www-data www-data  3286 May 24  2015 wp-cron.php
drwxr-xr-x 18 www-data www-data 12288 May 16 21:50 wp-includes
-rw-r--r--  1 www-data www-data  2422 Nov 21  2016 wp-links-opml.php
-rw-r--r--  1 www-data www-data  3301 Oct 25  2016 wp-load.php
-rw-r--r--  1 www-data www-data 33939 Nov 21  2016 wp-login.php
-rw-r--r--  1 www-data www-data  8048 Jan 11 05:15 wp-mail.php
-rw-r--r--  1 www-data www-data 16255 Apr  6 18:23 wp-settings.php
-rw-r--r--  1 www-data www-data 29896 Oct 19  2016 wp-signup.php
-rw-r--r--  1 www-data www-data  4513 Oct 14  2016 wp-trackback.php
-rw-r--r--  1 www-data www-data  3065 Aug 31  2016 xmlrpc.php

Я пытаюсь запустить контейнер Wordpress с подключенным томом Docker, чтобы иметь возможность постоянно хранить пользовательские файлы:

$ sudo docker run -p 80:80 --link some-mysql:mysql  -v /var/www:/var/www/html --name docker-wordpress -d wordpress

Проблема в том, что даже при точной репликации владения и привилегий на локальные файлы в /var/www:

$ sudo chown -R www-data:www-data /var/www
$ sudo find /var/www/ -type d -exec chmod 755 {} \;
$ sudo find /var/www/ -type f -exec chmod 644 {} \;

Я все еще получаю такую ​​ошибку при запуске Wordpress внутри контейнера:

Не удалось создать каталог

Как правильно установить права, чтобы Wordpress мог писать в смонтированный том Docker?


person Peter G.    schedule 29.05.2017    source источник


Ответы (1)


Глядя на ваше сообщение об ошибке, я прихожу к выводу, что вы пытаетесь установить плагин или обновить сам WordPress.

В этом вопросе немного сложно разобраться.

выполнение chown -R www-data:www-data /var/www для установки правильного пользователя: права группы должны технически решить эту проблему ..

При установке нового Wordpress папка upload & plugins еще не существует, поэтому, когда установщик пытается создать plugins/subfolder, он выдаст ошибку.

Как исправить проблему с разрешением на установку плагина Wordpress / Docker

Однако решить эту проблему довольно легко, если вы ее поняли.

Вариант А

в вашем .Docker файле добавьте следующее в самый конец, но перед любой командой [CMD].

RUN mkdir /var/www/html/wp-content/plugins
RUN mkdir /var/www/html/wp-content/uploads
RUN chown -R www-data:www-data /var/www
RUN find /var/www/ -type d -exec chmod 0755 {} \;
RUN find /var/www/ -type f -exec chmod 644 {} \;

Вариант Б

ssh в контейнер докеров
docker exec -it <container_name> /bin/bash

Если вы не знаете название контейнера, найдите его с помощью
docker ps

Просто выполните те же команды, что и в примере выше
$ mkdir /var/www/html/wp-content/plugins
$ mkdir /var/www/html/wp-content/uploads
$ chown -R www-data:www-data /var/www
$ find /var/www/ -type d -exec chmod 0755 {} \;
$ find /var/www/ -type f -exec chmod 644 {} \;

person Mathias Asberg    schedule 01.10.2018
comment
Я получаю следующую ошибку при попытке создать каталог плагинов: mkdir: невозможно создать каталог '/ var / www / html / wp-content / plugins': нет такого файла или каталога. Вы знаете, почему это происходит? Dockerfile: pastebin.com/fZgW50fr - person Yanick van Barneveld; 08.08.2019
comment
Вам нужно добавить флаг -p к mkdir, например $ mkdir -p /the/path. Вариант А у меня не сработал, вариант Б сработал. - person Eric Guan; 14.05.2020