Как исправить права доступа к файлу на wp-контенте с помощью официального изображения WordPress для docker-compose - PullRequest
2 голосов
/ 18 апреля 2019

Проблема


Я настраиваю локальную среду Wordpress с помощью docker-compose и официального изображения Wordpress из хранилища Docker.

Я нахожусь на окнах.
Проблема в том, что у меня есть некоторые проблемы с правами доступа к wp-контенту, и я не могу загрузить файлы из моей панели администратора Wordpress.wordpress error unable to create directory

Что я уже сделал


Затем я проверил права доступа к файлам внутри контейнера, и это был вывод:

file permissions in the wordpress container

Как видите, владелец моего wp-content - root вместо www-data.

Немедленное решение - открыть bash контейнера и дать
chown -R www-data:www-data /var/www/html/wp-content/

Это, конечно, работает, но я не хочу делать этот процесс каждый раз, когда начинаю новый проект WordPress.,Чтобы добиться этого, я создал Dockerfile вот так:

FROM wordpress:5.1.1

# install dos2unix (fix problem between CRLF and LF)
RUN apt-get update
RUN apt-get install -y dos2unix

# increase upload limit
RUN touch /usr/local/etc/php/conf.d/uploads.ini \
    && echo "upload_max_filesize = 10M;" >> /usr/local/etc/php/conf.d/uploads.ini

# fix permissions issues
COPY entrypoint.sh /
RUN dos2unix /entrypoint.sh
RUN chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]

И мой entrypoint.sh выглядит так:

#!/bin/bash
echo Fixing permissions...
chown -R www-data:www-data /var/www/html/wp-content/

Но потом я понял, что переопределяюENTRYPOINT исходного изображения WordPress, и контейнер всегда выходил с code 0.

Затем я попытался с CMD вместо ENTRYPOINT, и я изменил свой Dockerfile следующим образом:

FROM wordpress:5.1.1

# increase upload limit
RUN touch /usr/local/etc/php/conf.d/uploads.ini \
    && echo "upload_max_filesize = 10M;" >> /usr/local/etc/php/conf.d/uploads.ini

CMD chown -R www-data:www-data /var/www/html/wpcontent/

Но я всегда получаю сообщение об ошибке, что файл или папка не существует.

Я пытался использовать CMD также вот так:
CMD ["chown", "-R", "www-data:www-data", "/var/www/html/wp-content/"]
но безуспешно.

Вопрос


Существует способ выполнить команду после оригинала ENTRYPOINT?
Знаете ли вы иначелучший способ решить эту проблему?

1 Ответ

0 голосов
/ 21 апреля 2019

Из документации Докера вы должны использовать команду RUN.

Не путайте RUN с CMD. RUN фактически запускает команду и фиксирует результат; CMD не выполняет ничего во время сборки, но указывает целевую команду для образа.

Итак, строка в вашем Dockerfile должна быть: RUN chown -R www-data:www-data /var/www/html/wp-content

Кроме того, чтобы уменьшить количество созданных слоев и размер вашего изображения, я бы связал столько команд RUN, сколько возможно. Например (не проверено):

FROM wordpress:5.1.1

# install dos2unix (fix problem between CRLF and LF) and increase upload limit
RUN apt-get update -y && \
    apt-get install -y dos2unix && \
    touch /usr/local/etc/php/conf.d/uploads.ini \
    && echo "upload_max_filesize = 10M;" >> /usr/local/etc/php/conf.d/uploads.ini && \
    chown -R www-data:www-data /var/www/html/wp-content

# fix permissions issues
COPY entrypoint.sh /
RUN dos2unix /entrypoint.sh && \
    chmod +x /entrypoint.sh

ENTRYPOINT ["/entrypoint.sh"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...