azovl
@azovl

Yii2 (Docker, Nginx, phpfpm) — Как исправить «failed to open stream: Permission denied»?

Собственно мой первый опыт с использованием контейнеров и Yii2. Практически все настроить получилось, но вот незадача... Выдает сейчас ошибку:

PHP Warning – yii\base\ErrorException
copy(/usr/share/nginx/html/web/assets/ce44384e/css/bootstrap.min.css): failed to open stream: Permission denied
in /usr/share/nginx/html/vendor/yiisoft/yii2/helpers/BaseFileHelper.php at line 299


Т.е. насколько я понимаю, проблема связана с созданием или чтением файла?!

Что я имею:

Docker version 17.10.0-ce, build f4ffd25
docker-compose version 1.16.1, build 6d1ac21
docker-machine version 0.13.0, build 9ba6da9

Рабочая машина на базе MacOS.
Файлы внутри /web/assets рекурсивно заменил на 775 и принадлежат мне и группе wheel т.е.
'myUsername:wheel'.


Пробовал заменять весь каталог на 777, результат тот же самый.

Dockerfile у меня нет, я использую docker-compose.yml - вот его листинг: docker-compose.yml

Nginx конфигурационный файл использую вот такой: default

Что касается контейнеров, их у меня 4:
  • tutum/nginx
  • mariadb
  • php:fpm
  • phpmyadmin


Буду признателен за любые конструктивные предложения в решении этой проблемы. Насколько я понял, данная ситуация возникает только если машина использует Windows, MacOS.
  • Вопрос задан
  • 1468 просмотров
Пригласить эксперта
Ответы на вопрос 2
Maksclub
@Maksclub
maksfedorov.ru
Файлы внутри /web/assets рекурсивно заменил на 775

самой папке assets дайте 777, так как нужно в нее писать фреймворку
также эти права дайте всей папке runtime, коорая в корне каждого приложения (у basic в корне лежит)

возникает только если машина использует Windows, MacOS

это как раз ошибка в системе Линукс

Пробовал заменять весь каталог на 777, результат тот же самый.

а права то точно поменялись? может вам ошибку выдало? права стоят верные?
Ответ написан
hOtRush
@hOtRush
Не скажу за докер, там всегда с пользователями, группами и правами была каша какая-то. Здесь надо смотреть от какого пользователя запущен php и какому пользователю принадлежит директория.
То есть вот ты смонтировал директорию
./public:/usr/share/nginx/html
залогинься в контейнер и посмотри кому она принадлежит, тупо ls -l, посмотри в htop от кого работает пхп. К примеру пхп работает от www-data:www-data, а директория принадлежит root:root, тогда нужно директорию chown -R www-data:www-data. Это самое простое наверное. Если у тебя как ты говоришь myUsername:wheel (именно в контейнере, а не на твоем компе), то можно изменить на myUsername:www-data, добавить пользователя myUsername в группу www-data и разрешить группе доступ через chown -R g+rw.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы