Вопрос или проблема
Я использую Docker и Docker Compose для установки WordPress на локальный хост, и все работает хорошо, однако у меня возникают проблемы при загрузке новых медиафайлов и установке тем, новых плагинов и т.д.
Сообщение “Не удалось создать директорию” появляется, когда я хочу установить новый плагин.
После обширных исследований я попробовал много вариантов, чтобы исправить права на файлы/папки, даже с помощью chmod 777, но безуспешно.
Мой файл docker-compose:
wordpress:
container_name: testing
image: wordpress
environment:
- WORDPRESS_DB_PASSWORD=password
- VIRTUAL_HOST=stores.dev
ports:
- "80:80"
volumes:
- ./:/var/www/html
links:
- psdb4:mysql
psdb4:
image: mysql:5.7
environment:
- MYSQL_ROOT_PASSWORD=password
- MYSQL_DATABASE=wordpress
Я использовал следующую команду безуспешно в каталоге WordPress:
chmod -R 777 wordpress
chmod -R 755 wordpress
Я использую Mac на El Capitan 10.11.6.
Было бы неплохо, чтобы мой виртуальный хост ‘stores.dev’ тоже работал, но это не получается, и сайт WP можно открыть только через IP-адрес моей docker-машины.
Почти потерял надежду на все это и хочу, чтобы все было исправлено.
С уважением,
Мэтт
В итоге я выбрал XAMPP и приложение WordPress Bitnami.
У меня не возникло проблем с разрешениями на файлы, и я успешно настроил виртуальные хосты с помощью этого учебника.
Ответ или решение
Теория
Когда вы работаете с WordPress в Docker, одна из наиболее распространенных проблем, с которыми сталкиваются пользователи, связана с правами доступа к файловой системе. Проблема "невозможно создать директорию" возникает, когда контейнер WordPress не имеет необходимых прав на запись в директории, куда он пытается установить плагины, темы или загружать медиафайлы. Это связано с тем, что Docker использует контейнеризированную файловую систему, которая может иметь иные права по сравнению с вашей локальной машиной.
Кроме того, в вашем случае вы попробовали изменить права доступа, применив команды chmod -R 777
и chmod -R 755
на директорию WordPress, но это не решило проблему. Это может указывать на то, что проблема кроется не только в правах доступа, но и в владельце файловых систем.
Также, проблема с доступом к вашему сайту через виртуальный хост "stores.dev" может быть связана с конфигурацией сети Docker и отсутствием корректных записей в файле /etc/hosts
на вашем Mac.
Пример
Давайте рассмотрим пример корректной настройки docker-compose и связанных параметров:
version: '3.7'
services:
wordpress:
container_name: wordpress
image: wordpress:latest
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: root
WORDPRESS_DB_PASSWORD: password
WORDPRESS_DB_NAME: wordpress
ports:
- "8000:80"
volumes:
- ./wordpress:/var/www/html
depends_on:
- db
db:
container_name: db
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: wordpress
volumes:
db_data:
В этом примере, возможно, потребуется изменить права доступа и владельца на каталог wordpress
локально, чтобы обеспечить доступ контейнера к этому каталогу.
Применение
Шаг 1: Убедитесь в правильности прав доступа
Перед тем как начать, убедитесь, что пространство монтирования имеет корректные права доступа. Используйте следующую команду для изменения владельца директорий:
sudo chown -R $USER:$USER ./wordpress
Эта команда изменяет владельца директорий на текущего пользователя, что часто решает проблему с правами доступа.
Шаг 2: Коррекция сети Docker
Чтобы ваш виртуальный хост "stores.dev" работал, добавьте его в файл /etc/hosts
. Откройте терминал и внесите следующие изменения:
sudo nano /etc/hosts
Добавьте следующую строку, заменив <DOCKER_IP>
реальным IP-адресом Docker-контейнера:
<DOCKER_IP> stores.dev
Шаг 3: Запуск контейнеров
Перезапустите ваши контейнеры Docker:
docker-compose down
docker-compose up -d
Шаг 4: Проверка корректности
Попробуйте загрузить страницу вашего WordPress сайта через виртуальный хост "stores.dev". Если это не работает, убедитесь, что вы очищаете DNS-кэш вашего браузера и системы.
Соблюдая данные рекомендации, вы должны получить работоспособный WordPress на локальной машине, который способен корректно загружать медиафайлы и обновлять плагины и темы. Такой подход поможет стабилизировать среду разработки, избежать проблем с правами доступа и упростить управление вашим проектом.