Nachdem ich die Rezeption kennengelernt hatte, entschied ich mich, bald das Backend auszuprobieren, und schrieb den Code, um das Bild mit PHP mit dem beliebten Dokcer auf den Server hochzuladen. Und süchtig
・ Windows10 <VirtualBox (Vagrant) <CentOS7 <Docker
Startkonfiguration
docker-compose.yml
version: '3'
services:
web:
#ver 1.17.7
build: ./nginx
ports:
- '8080:80'
links:
- php-fpm
volumes:
- ./data/public:/var/www/html/public
depends_on:
- php-fpm
php-fpm:
#ver 7.3
build: ./php-fpm
links:
- db
volumes:
- ./data:/var/www/html
Ich war endlos beunruhigt von diesem einzeiligen PHP-Fehler
upload.php
move_uploaded_file($_FILES['image']['tmp_name'], $savePath);
Permisson denied ......
Verwenden Sie vorerst nur geringe Linux-Kenntnisse, um die Berechtigung des Image-Speicherordners festzulegen
$sudo chmod 777 images
Stellen Sie sicher, dass der Code wie folgt funktioniert.
Natürlich konnte ich eine solche sicherheitsfreundliche Autorität selbst auf dem lokalen Server nicht verzeihen, deshalb lehnte ich sie ab.
Überprüfen Sie den Benutzer mit phpinfo.
Es stellt sich heraus, dass www-data USER ist. Dann sollte ich www-data Autorität geben
Die Autorität in der vagabundierenden Umgebung ist wie folgt
$ls -l
~
drwxrwxr-x. 2 vagrant vagrant 4096 Jan 13 08:32 images
~
$ sudo chown www-data images
chown: invalid user: ‘www-data’
Mir wurde gesagt, dass es nicht gültig ist, also werde ich die Benutzerliste überprüfen
$cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
~
vagrant:x:1000:1000:vagrant:/home/vagrant:/bin/bash
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
Es gibt viele andere Dinge, aber es gibt keine WWW-Datenbenutzer.
Starten Sie den Container
docker exec -it [id] bash
Versuchen Sie, den php-fpm-Container mit einzugeben.
Die darin enthaltenen Dateiberechtigungen sind
drwxrwxr-x. 2 1000 1000 4096 Jan 13 08:32 images
1000 1000?
Als ich es nachgeschlagen habe, scheint die UID des vagabundierenden Benutzers 1000 zu sein.
Wenn Sie die Benutzerliste mit "$ cat / etc / passwd" überprüfen
vagrant:x:1000:1000:vagrant:/home/vagrant:/bin/bash
Sie können sehen, dass die Vagabund-UID 1000 nummeriert ist
Es scheint, dass es in der virtuellen Umgebung einen anderen virtuellen Container namens VM gibt und die 1000-UID in diesem Container nicht benannt ist Mit anderen Worten, es gibt keine Benutzer, einschließlich des vagrnt-Benutzers mit der Nummer 1000 im Container. Aber uid scheint üblich zu sein
Wenn Sie dann aus dem Container heraus prüfen, sollten www-Daten vorhanden sein ...
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
War dort
Ich weiß nicht, ob es die richtige Antwort ist, aber ich hatte die Idee, einen vagabundierenden Benutzer mit einer UID von 33 außerhalb des Containers zu erstellen und den Besitzer des Bilderordners in 33 zu ändern. Das passt gut in mich. Ich meine, ich habe es nicht anders geschafft
$useradd -u 33 www-data -g vagrant
$chown www-data images
Andere https://gtrt7.com/blog/nginx/docker_userid_share#3docker-composeyml Es scheint, dass Sie von der Docker-Seite anstelle der vagabundierenden Seite wie dieser übereinstimmen können.
Ich habe einen solchen Fehler bekommen und habe ihn nicht verstanden und geworfen
web_1 | 2020/01/13 13:52:54 [emerg] 1#1: host not found in upstream "php-fpm" in /etc/nginx/conf.d/default.conf:20
web_1 | nginx: [emerg] host not found in upstream "php-fpm" in /etc/nginx/conf.d/default.conf:20
default.conf:20fastcgi_pass php-fpm:9000;
Ich denke, es wäre besser, die Dateirelationen im Docker-Container zu vervollständigen, aber ich konnte keinen guten Weg finden, dies zu tun, also gab ich diesmal auf.
Ich habe nicht genug Kenntnisse über Linux und nginx php-fpm, um etwas tiefer zu gehen. Wenn ich jetzt einen Ordner erstelle, in den ich Dateien mit php hochgeladen habe, habe ich die Berechtigung entsprechend geändert. Es war.
Bitte lassen Sie mich wissen, ob es einen guten Weg gibt ...
Recommended Posts