Wenn ich dieses Bild mit baue docker build -t myname/symfony_apps:latest . und führen Sie den Container mit aus docker run -p 8080:80 myname/symfony_apps:latest.Das Apache-Protokoll wird von Permission Denied-Fehlern überflutet, die seltsame Sache, mit der ich überprüft habe ls -a und Berechtigungen sind in Ordnung. und wenn ich chmod von der Bash des Containers aus starte, sind Apache-Berechtigungsprobleme verschwunden und die App funktioniert gut
Situation
Ausführen von chmod-Befehlen aus dockerfile: berechtigungen werden geändert, aber Apache beschwert sich immer noch über die verweigerte Berechtigung.Ausführen von chmod-Befehlen mit Bash im Container: berechtigungen werden geändert und meine App wird ausgeführt
Irgendeine Idee, fehlt mir etwas, vielleicht sollte ich irgendwo in der Docker-Datei einen Root-Benutzer hinzufügen?
Ich hatte das gleiche Problem und es scheint, dass es einen Fehler in Docker oder overlay2 gibt, wenn Verzeichnisinhalt in einer Ebene erstellt und seine Berechtigungen in einer anderen geändert werden.
Als Problemumgehung können Sie Quellen in ein temporäres Verzeichnis kopieren:
COPY . /src
Und verschiebe es dann zu /var/www/html und Setup-Berechtigungen (in einem RUN Befehl):
Dieses Problem ist wahrscheinlich das Ergebnis eines VOLUME definition innerhalb der Upstream-Dockerdatei. Wenn in der Docker-Datei ein Volume definiert ist, können Sie Dateien mit einem hinzufügen COPY oder ADD befehl direkt in das Bild. Jedoch, ein RUN linie wird:
Erstellen Sie einen temporären Container mit der Bilddefinition ab dem aktuellen Punkt der Docker-Datei
In diesem temporären Container wird ein anonymes Volume als Sie oder ein übergeordnetes Image bereitgestellt, das in der Docker-Datei angegeben ist
Das anonyme Volume wird aus dem Inhalt des Images initialisiert
Ihr Befehl wird im Container ausgeführt
Wenn Sie das Verzeichnis währenddessen auflisten RUN befehl sehen Sie Ihre Änderungen angewendet, aber diese Änderungen wurden auf das Volume angewendet
Wenn Ihr Befehl Ausführen abgeschlossen ist, erfasst Docker die Änderungen am Container
Diese Veränderungen können mit einem docker diff wenn Sie die temporären Container nicht löschen (Sie können einen Build mit ausführen --rm=false um sie bleiben zu lassen)
Diese Änderungen umfassen nicht den Inhalt des anonymen Volumes, da sie nicht im temporären Containerdateisystem vorhanden sind, Volumes sind getrennt
Aufgrund dieses Verhaltens haben Sie folgende Möglichkeiten:
sie können Ihre Dateien in ein anderes Verzeichnis kopieren und dort die Berechtigungen ändern
sie können die Berechtigungen auf Ihrem Host korrigieren, damit sie direkt mit diesen Berechtigungen kopiert werden
sie können das Volume entweder aus Ihrem Image entfernen, das Upstream-Image veranlassen, die Volumendefinition zu entfernen, oder Sie können Ihre eigene Kopie des Upstream-Images ohne die Volumendefinition neu erstellen und Ihre Bilder darauf aufbauen
Beachten Sie, dass in den aktuellen PHP-Images anscheinend das Volume entfernt wurde, was bedeutet, dass wir effektiv Option 3 haben.
Wenn ich diese ausführbare Datei über docker-Compose-Volumes überschreibe, wird die execute die Berechtigung ist einfach wie ein Rollback - technisch überschrieben mit der ursprünglichen Dateiberechtigung.
Der Fix für den Entwicklermodus ist einfach zu chmod a+x yourfile vom Host, der beim Compose-Volume-Mounten geerbt wird.
Ich sehe ein zusätzliches Leerzeichen in Ihrem letzten Befehl (ich bin auf meinem Handy, also kann ich nicht sicher sein). Da das Berechtigungsproblem mit dem Protokollverzeichnis zu liegen scheint, ändern Sie die letzte Zeile in: ``
FÜHREN SIE chmod -R 777 /var/ www/html/app/ cache /var/www/html/app/logs AUS
Ich kann Ihr Problem nicht reproduzieren. Wenn ich Ihre Docker-Datei verwende und einige Dummy-Dateien lokal einrichte, sind die Berechtigungen korrekt und alles funktioniert einfach. Ich kann einen Container booten und über einen Webbrowser auf Inhalte zugreifen. Können Sie Ihre Frage aktualisieren, um bestimmte Fehlermeldungen aufzunehmen? Sind Sie sicher, dass Ihre Apache-Konfiguration 'apache2.conf') verursacht kein Problem? Verschwinden die Fehler, wenn Sie 'apache2.conf?