2017-04-03 2 views
0

Ich versuche, CakePHP 2 App innerhalb eines Containers zu laufen. Ich habe alles eingerichtet und PHP funktioniert ordnungsgemäß, aber habe ein Problem:/var/www/app/tmp hat falsche Schreibberechtigungen. Dieses Verzeichnis wird vom Datenträger geladenChange chmod von dir aus dem Volume

Antwort

0

Haben Sie sich bereits die CakePHP2.0-Dokumentation angesehen? Vielleicht ist das nützlich:

Ein häufiges Problem ist, dass die app/tmp-Verzeichnisse und Unterverzeichnisse sowohl vom Webserver als auch vom Benutzer der Befehlszeile beschreibbar sein müssen. Auf einem UNIX-System, wenn Ihr Web-Server-Benutzer von der Befehlszeile Benutzer unterschiedlich ist, können Sie die folgenden Befehle nur einmal in Ihrem Projekt ausführen, um sicherzustellen, dass die Berechtigungen korrekt eingerichtet sein:

HTTPDUSER=`ps aux | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\ -f1` 
setfacl -R -m u:${HTTPDUSER}:rwx app/tmp 
setfacl -R -d -m u:${HTTPDUSER}:rwx app/tmp 

Quelle: https://book.cakephp.org/2.0/en/installation.html#permissions

+0

In Container-Sinne gibt es keinen Befehlszeilenbenutzer. Nur der Stamm existiert in Containern. Dies hat mit dem eigentlichen Überlagerungsprozess zu tun. – Dockstar

0

Dies passiert sehr oft, wenn Sie PHP über einen Container Passthrough ausführen. In diesem Szenario übergeben Sie ein Verzeichnis mit vordefinierten Berechtigungen an die Anwendung. Sie müssen regelmäßig sicherstellen, dass die Berechtigungen vom Container auf den Webserver aktualisiert werden. Lassen Sie uns sagen, dass Ihre Container Bahn genannt wird

Docker exec web chown -R www-data/var/www/html

(/ var/www/html mit ersetzt werden, wo immer sich Ihr Code)

Für Beispiel. Dadurch wird es im Container einwandfrei funktionieren, kann jedoch bei Verwendung von Linux Probleme beim Zugriff auf die Daten vom Host-Betriebssystem verursachen. Ich hatte dieses Problem mehrmals mit Laravel und PHP mit einem Volume Passthrough vom Host, da die Dateien des Volumes selbst auf eine Benutzer-ID aktualisiert werden, die das Host-Betriebssystem nicht hat.