Permission Denied Erreur à l'aide de Laravel & menu fixe
J'ai deux conteneurs docker: Nginx et App.
L'application conteneur s'étend à PHP-fpm et aussi a mon Laravel Code.
Dans mon docker-compose.yml
je suis en train de faire:
version: '2'
services:
nginx:
build:
context: ./nginx
dockerfile: ./Dockerfile
ports:
- "80:80"
links:
- app
app:
build:
context: ./app
dockerfile: ./Dockerfile
Dans mon Nginx Dockerfile je suis en train de faire:
FROM nginx:latest
WORKDIR /var/www
ADD ./nginx.conf /etc/nginx/conf.d/default.conf
ADD . /var/www
EXPOSE 80
Dans mon Application Dockerfile je suis en train de faire:
FROM php:7-fpm
WORKDIR /var/www
RUN apt-get update && apt-get install -y libmcrypt-dev mysql-client && docker-php-ext-install mcrypt pdo_mysql
ADD . /var/www
Après avoir exécuté avec succès docker-composer jusqu', j'ai le message d'erreur suivant lorsque j'essaie localhost
Le flux ou le fichier "/var/www/stockage/logs/laravel.journal" n'a pas pu être ouvert: failed to open stream: Permission denied
À partir de ma compréhension, le dossier de stockage doit accessible en écriture par le serveur web.
Que dois-je faire pour résoudre ce problème?
Vous devez vous connecter pour publier un commentaire.
Faire de votre Dockerfile quelque chose comme ci-dessous -
Cela rend répertoire
/var/www
détenue parwww-data
qui est la valeur par défaut de l'utilisateur pourphp-fpm
.Car il est compilé avec l'utilisateur
www-data
.Ref-
https://github.com/docker-library/php/blob/57b41cfc2d1e07acab2e60d59a0cb19d83056fc1/7.0/jessie/fpm/Dockerfile
--chown
drapeau sur laADD
ouCOPY
instruction pour réduire la taille de vos images. CommeCOPY --chown=www-data:www-data . /var/www
. Dans mon cas, la taille de l'image passe de 130 MO à 100 mo.docker exec -i -t (here is you container id) bash
J'ai trouvé le même problème et je l'ai fixée par
Lors de l'utilisation de bind monte dans le Panneau, les autorisations d'origine dans le Panneau d'accueil sont conservés dans le récipient. Cela nous permet de définir les autorisations appropriées sur le Panneau d'accueil, à être utilisés à l'intérieur du conteneur.
Tout d'abord, vous devriez trouver le
uid
etgid
de la nginx, par exemple:docker-compose exec nginx id www-data
La sortie de cette commande serait quelque chose comme ceci:
uid=33(www-data) gid=33(www-data) groups=33(www-data)
Ensuite, vous devez utiliser ces
uid
etgid
pour définir des autorisations sur le Panneau d'accueil, qui sera utilisé par le conteneur de trop. Donc, exécutez la commande suivante sur le Panneau d'accueil:sudo chown -R 33:33 site
Maintenant, tout doit fonctionner.
COPY --chown=33:33 . .
. Cela conserve la propriété des fichiers d'origine. (J'ai lu que cela ne fonctionnera pas sur Windows, cependant.)Vous pouvez faire 3 choses que j'ai utilisé/à l'aide de
storage
dossier (sudo chmod 777 storage/storage/*
)EXÉCUTER chown -R www-data:www-data /var/www
Un chmod 755 /var/www
Déplacer le dossier du projet à
/home
qui est nul besoin d'une permission spéciale d'écriture sur ce répertoire(Recommande Personnellement ce) (Dans mon cas j'ai utilisé/home/projects/
et tous placé là).Remarque: Si le projet est en
/var/www/
alors si vous avez écrit de téléchargement de fichiers aussi vous avez besoin d'une autorisation pour que les dossiers de trop. cela permettra d'éviter une telle erreur lorsque vous avez déplacé que pour/home
u peut juste à droite, cliquez sur votre laravel dossier, cliquez sur propriétés,puis les autorisations, et de "groupe", champ, sélectionnez le "docker" et donnent des autorisations nécessaires pour "docker" groupe 🙂 c'est un travail pour moi