wake-up-neo.com

Fehler mit verweigerter Berechtigung bei Verwendung von Laravel und Docker

Ich habe zwei Docker-Container: Nginx und App.
Der App-Container erweitert PHP-fpm und hat auch meinen Laravel-Code.

In meinem docker-compose.yml mache ich:

version: '2'
services:
    nginx:
        build:
            context: ./nginx
            dockerfile: ./Dockerfile
        ports:
            - "80:80"
        links:
            - app
    app:
        build:
            context: ./app
            dockerfile: ./Dockerfile

In meiner Nginx Dockerfile mache ich:

FROM nginx:latest
WORKDIR /var/www
ADD ./nginx.conf /etc/nginx/conf.d/default.conf
ADD . /var/www
EXPOSE 80

In meiner App Dockerfile mache ich:

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

Nachdem ich Docker-Compose erfolgreich ausgeführt habe, habe ich die folgende Fehlermeldung, wenn ich localhost versuche

Der Stream oder die Datei "/var/www/storage/logs/laravel.log" konnte nicht geöffnet werden: Fehler beim Öffnen des Streams: Berechtigung verweigert

Nach meinem Verständnis muss der Speicherordner vom Webserver beschreibbar sein.
Was muss ich tun, um das Problem zu lösen?

5
Anand Naik B

Machen Sie Ihre Dockerfile wie folgt: 

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
RUN chown -R www-data:www-data /var/www

Dadurch wird das Verzeichnis /var/www im Besitz von www-data, dem Standardbenutzer für php-fpm

Da es mit Benutzer www-data kompiliert wird.

Ref- 

https://github.com/docker-library/php/blob/57b41cfc2d1e07acab2e60d59a0cb19d83056fc1/7.0/jessie/fpm/Dockerfile

12
vivekyad4v

Bei Verwendung von Bindungsbereitstellungen in Docker bleiben die ursprünglichen Berechtigungen auf dem Docker-Host im Container erhalten. Auf diese Weise können wir die entsprechenden Berechtigungen für den Docker-Host festlegen, die im Container verwendet werden sollen.

Zuerst sollten Sie die uid und gid der Nginx finden, zum Beispiel:

docker-compose exec nginx id www-data

Die Ausgabe dieses Befehls würde ungefähr so ​​aussehen:

uid=33(www-data) gid=33(www-data) groups=33(www-data)

Anschließend sollten Sie diese uid und gid verwenden, um Berechtigungen für Docker Host festzulegen, die auch vom Container verwendet werden. Führen Sie daher den folgenden Befehl auf dem Docker-Host aus:

Sudo chown -R 33:33 site

Jetzt muss alles funktionieren.

5
Hamid Mohayeji

Ich habe ein ähnliches Problem gefunden und es durch behoben 

chown -R www-data:www-data /var/www

chmod -R 755 /var/www/storage

Sie können 3 Dinge tun, wie ich sie benutzt habe

  1. Erteilung der 777-Berechtigung für den storage-Ordner (Sudo chmod 777 storage/ storage/*)
  2. RUN chown -R www-data:www-data /var/www RUN chmod 755 /var/www

  3. Verschieben Sie den Projektordner nach /home, was keine spezielle Erlaubnis zum Schreiben in dieses Verzeichnis erfordert (Persönlich empfehlen) (In meinem habe ich /home/projects/ verwendet und alle dort abgelegt). 


Hinweis: Wenn sich das Projekt in /var/www/ befindet, müssen Sie, wenn Sie den Dateiupload geschrieben haben, auch die Berechtigung für diese Ordner haben. Dadurch wird ein solcher Fehler vermieden, wenn Sie diesen zu /home verschieben.

4
Abdulla Nilam

sie können einfach mit der rechten Maustaste auf Ihren Laravel-Ordner klicken, auf Eigenschaften und dann auf Berechtigungen klicken. Wählen Sie im Feld "Gruppe" das Andockfenster aus, und geben Sie der Docker-Gruppe die erforderlichen Berechtigungen. :) Das funktioniert für mich

0
rogal127