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 up erfolgreich ausgeführt habe, erhalte ich den folgenden Fehler, wenn ich localhost versuche
Der Stream oder die Datei „/var/www/storage/logs/laravel.log“ konnte nicht geöffnet werden: Stream konnte nicht geöffnet werden: Berechtigung verweigert
Nach meinem Verständnis muss der Speicherordner vom Webserver beschreibbar sein.
Was soll ich tun, um dies zu beheben?
Machen Sie Ihr 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
Dies macht Verzeichnis /var/www gehört www-data das ist der Standardbenutzer für php-fpm.
Das hat bei mir nicht funktioniert. Gleicher Fehler. Jeder hat eine Idee.
– Janaka Pushpakumara
23. April 2018 um 8:10 Uhr
Ich habe auch das gleiche Problem. Auch diese Lösung hat bei mir nicht funktioniert.
– Marcelo Noguti
7. Mai 2018 um 19:27 Uhr
Du kannst den … benutzen --chown Flagge auf der ADD oder COPY Anweisung zum Verkleinern der Bildgröße. Wie COPY --chown=www-data:www-data . /var/www. In meinem Fall wurde die Größe des Bildes von 130 MB auf 100 MB reduziert.
– J. Eggerstedt
27. Mai 2018 um 10:38 Uhr
Für mich musste ich mit diesem Befehl in den Container selbst eintauchen docker exec -i -t (here is you container id) bash
Ich erhalte: “Zugriff auf ‘/var/www/storage’ nicht möglich: Keine solche Datei oder Verzeichnis”
– Naneri
23. September 2018 um 19:31 Uhr
Hamid Mohayeji
Bei der Verwendung von Bind-Mounts in Docker bleiben die ursprünglichen Berechtigungen im Docker-Host im Container erhalten. Dies ermöglicht es uns, entsprechende Berechtigungen auf dem Docker-Host festzulegen, die innerhalb des Containers verwendet werden.
Zuerst sollten Sie die finden uid und gid von nginx, zum Beispiel:
docker-compose exec nginx id www-data
Die Ausgabe dieses Befehls würde in etwa so aussehen:
Dann sollten Sie diese verwenden uid und gid um Berechtigungen für den Docker-Host festzulegen, die auch vom Container verwendet werden. Führen Sie also den folgenden Befehl auf dem Docker-Host aus:
sudo chown -R 33:33 site
Jetzt muss alles funktionieren.
Vielen Dank! Das können Sie übrigens ganz einfach in Ihrem Dockerfile durchführen, indem Sie die Daten mit hineinkopieren COPY --chown=33:33 . .. Dadurch bleibt das Eigentum an den Originaldateien erhalten. (Ich habe jedoch gelesen, dass dies unter Windows nicht funktioniert.)
– Cameron Hudson
17. Juni 2019 um 0:03 Uhr
vielleicht docker exec statt docker-compose exec?
– Naneri
24. Juni 2019 um 12:14 Uhr
Abdulla Nilam
Sie können 3 Dinge tun, die ich verwendet habe
Erteilen Sie 755 die Berechtigung zu storage Mappe (sudo chmod 755 storage/ storage/* )
Projektordner verschieben nach /home was keine besondere Berechtigung erfordert, um in dieses Verzeichnis zu schreiben (Empfehlen Sie dies persönlich) (In meiner habe ich verwendet /home/projects/ und alle dort platziert).
Notiz: Wenn das Projekt drin ist /var/www/ Wenn Sie dann auch Datei-Upload geschrieben haben, benötigen Sie auch die Berechtigung für diese Ordner. Dadurch wird ein solcher Fehler beim Verschieben vermieden /home
Ich habe all dies versucht, und es hat nicht funktioniert. Mein Laravel-Speicherordner hatte Zugriff. Aber /var/www/storage hatte immer noch keine Erlaubnis.
Nach dem Lesen mehrerer Vorschläge, insbesondere mit diesem. Ich habe Folgendes getan (bitte beachten Sie das php ist der Name meines Container-Images, und ich habe mein Laravel-Projekt direkt damit verknüpft /var/www):
Von meinem Docker bin ich gerannt docker-compose exec php ls -al /var/www/storage
Ich habe nur das gesehen root hatte Zugriff, aber ich brauche www-data Zugriff zu haben.
Dann rannte ich docker-compose exec php chown -R $USER:www-data /var/www/storage
Das gibt www-data Zugriff auf den Speicherordner
Dann rannte ich docker-compose exec php chown -R $USER:www-data /var/www/bootstrap/cache
Das gibt www-data Zugriff auf den Bootstrap/Cache-Ordner
Wenn Sie Punkt 1 erneut ausführen, www-data sollte Zugriff haben, und Ihre Laravel-App sollte in Ordnung sein.
Essana3
Sie müssen einen Benutzer erstellen, der mit dem auf Ihrem Computer übereinstimmt (mit dem Sie die Projektdateien erstellt haben). Ändern Sie also in der App Dockerfile Ihre Datei wie folgt:
FROM php:fpm
# Arguments defined in docker-compose.yml
ARG user
ARG uid
# Install system dependencies
RUN apt-get update && apt-get install -y libmcrypt-dev mysql-client
# Install PHP extensions
RUN docker-php-ext-install mcrypt pdo_mysql
# Get latest Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
# Create system user to run Composer and Artisan Commands
RUN useradd -G www-data,root -u $uid -d /home/$user $user
RUN mkdir -p /home/$user/.composer && \
chown -R $user:$user /home/$user
# Set working directory
WORKDIR /var/www
# Set the user
USER $user
# Copy your files
COPY . . # You can use "." as a destination since you already changed the workdir
Kurzer Hinweis: Wenn Sie Docker nur für die lokale Entwicklung verwenden, müssen Sie nichts kopieren, sondern nur Bind-Mounts verwenden.
Nehmen Sie in Ihrer Docker-Compose-Datei die folgenden Änderungen vor:
app:
build:
args:
user: essana3 # your username on your machine, you can get it by running echo $USER
uid: 1000 # your uid which you can get by running id -u
context: ./app
dockerfile: Dockerfile # if your dockerfile is called Dockerfile, you don't need to add the dockerfile option
volumes:
- ./app:/var/www
BONUS: Sie können die Docker-Datei oben verwenden, um Utility-Container in Ihrer Docker-Compose-Datei zu erstellen, um Artisan- und Composer-Befehle auszuführen:
composer:
build:
args:
user: essana3 # your username (echo $USER)
uid: 1000 # your uid (id -u)
context: ./app
working_dir: /var/www
volumes:
- ./app:/var/www
entrypoint: ['composer']
artisan:
build:
args:
user: essana3 # your username (echo $USER)
uid: 1000 # your uid (id -u)
context: ./app
working_dir: /var/www
volumes:
- ./app:/var/www
entrypoint: ['php', 'artisan']
königlich127
Sie können einfach mit der rechten Maustaste auf Ihren Laravel-Ordner klicken, auf Eigenschaften und dann auf Berechtigungen klicken und im Feld „Gruppe“ den „Docker“ auswählen und der Gruppe „Docker“ die erforderlichen Berechtigungen erteilen 🙂 Das funktioniert für mich
Hier steht Docker im Kontext. Alles wird über das Terminal gesteuert, nicht über die GUI
– Dinesh Suthar
18. November 2020 um 9:21 Uhr
12046500cookie-checkPermission Denied-Fehler bei Verwendung von Laravel und Dockeryes