Права доступа к файлам с Laravel на Docker - невозможно редактировать файл - PullRequest
0 голосов
/ 24 февраля 2019

Я запускаю новую установку Laravel на Docker.

Когда я запускаю контейнер и пытаюсь получить доступ к приложению laravel из браузера, я получаю эту ошибку, которую Laravel выдает на экран для прав доступа к файлу

UnexpectedValueException
The stream or file "/var/www/html/storage/logs/laravel-2019-02-24.log" could not be opened: failed to open stream: Permission denied

Итак, если я сделаю это, пока я нахожусь в работающем контейнере sudo chown www-data:www-data -R /var/www/html/ и переключу владение файлами на пользователя www-data, ошибки исчезнут, и я смогу увидеть страницу по умолчанию, как и ожидалось,Проблема в том, что я не могу писать / редактировать какие-либо файлы приложения и вносить изменения в базу кода.

Если я sudo chown -R lykos:lykos ./application // the folder that my laravel app lives in из своего локального терминала (т.е. не через работающий контейнер), я могу редактироватьфайлы, но снова появляется ошибка для прав доступа к файлам.

Как это исправить?Кстати, я нахожусь на Linux, поэтому я думаю, что эта ошибка не происходит для пользователей Windows или Mac.Также я хочу попытаться избежать общего решения chmod 777, поскольку оно не рекомендуется в качестве правильного решения

1 Ответ

0 голосов
/ 24 февраля 2019

Все, что вам нужно сделать, это изменить разрешение смонтированного каталога на самом хосте, например, если у вас есть следующий каталог на хосте /home/lykos/laravel/data, и вам нужно смонтировать его в контейнере докера, выполните следующее:

  • Проверьте UID и GID внутри контейнера, который используется для запуска бега, например, вы можете найти UID и GID со следующим значением 1000, затем изhost запустите следующую команду chown 1000:1000 /home/lykos/laravel/data

Теперь приложение laravel должно иметь возможность писать в любой каталог, который вы используете в качестве места назначения для /home/lykos/laravel/data, и убедиться, что вы не изменили его безподтверждая, что у вас есть правильное разрешение, например, не создавайте другой каталог внутри него вручную, если вы не выполните chown после его создания.

Приведенное выше решение работает для пользователя, который будет использоваться для записи в этот каталог, еслиЕсть другие пользователи, которым вы должны предоставить разрешение, возможно, через Linux.acl вместо использования мирового разрешения (777)

Допустим, у вас есть контейнер в качестве веб-сервера, и вы должны хранить приложение, размещенное внутри контейнера, при разработке с вашего локального хоста.Предполагая, что локальный пользователь, который используется для разработки, - lykos, а пользователь контейнера, который используется веб-сервером, - 33 для UID и GID, вы можете сделать следующее с вашего локального хоста:

sudo chown 33:33 /home/lykos/laravel/data -R
sudo setfacl -Rm u:lykos:rwx,d:u:lykos:rwx /home/lykos/laravel/data

Приведенная выше команда даст веб-серверу возможность доступа и обновления файлов проекта.а также дает вашему локальному хосту возможность изменять текущие файлы и вновь созданные файлы (обратите внимание, что если вы создаете какой-либо файл или каталог, используя пользователя lykos, вам нужно сделать chown, чтобы соответствовать uid веб-сервера)

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