Après avoir appris la réception, j'ai décidé d'essayer bientôt le back-end, j'ai donc écrit le code pour télécharger l'image sur le serveur avec PHP en utilisant le populaire Dokcer. Et accro
・ Windows10 <VirtualBox (vagabond) <CentOS7 <Docker
Configuration de démarrage
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
J'ai été sans cesse troublé par cette erreur PHP sur une ligne
upload.php
move_uploaded_file($_FILES['image']['tmp_name'], $savePath);
Permisson denied ......
Pour le moment, utilisez des connaissances Linux superficielles pour définir l'autorité du dossier de stockage d'images
$sudo chmod 777 images
Confirmez que le code fonctionne comme.
Bien sûr, je ne pouvais pas pardonner à une autorité aussi favorable à la sécurité, même sur le serveur local, alors je l'ai rejetée.
Vérifiez l'utilisateur avec phpinfo.
Il s'avère que www-data est USER. Ensuite, je devrais donner autorité à www-data
L'autorité sous l'environnement vagabond est la suivante
$ls -l
~
drwxrwxr-x. 2 vagrant vagrant 4096 Jan 13 08:32 images
~
$ sudo chown www-data images
chown: invalid user: ‘www-data’
On m'a dit que ce n'était pas valide, je vais donc vérifier la liste des utilisateurs
$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
Il y a beaucoup d'autres choses, mais il n'y a pas d'utilisateurs de www-data.
Lancer le conteneur
docker exec -it [id] bash
Essayez d'entrer dans le conteneur php-fpm avec.
Les autorisations de fichier qu'il contient sont
drwxrwxr-x. 2 1000 1000 4096 Jan 13 08:32 images
1000 1000?
Quand je l'ai recherché, le uid de l'utilisateur vagabond semble être 1000.
Si vous vérifiez la liste des utilisateurs avec $ cat / etc / passwd
vagrant:x:1000:1000:vagrant:/home/vagrant:/bin/bash
Vous pouvez voir que le liquide vagabond est numéroté 1000
Il semble qu'il existe un autre conteneur virtuel dans l'environnement virtuel appelé VM et le 1000 uid n'est pas nommé dans ce conteneur En d'autres termes, il n'y a aucun utilisateur incluant l'utilisateur vagrnt au numéro 1000 dans le conteneur. Mais uid semble être commun
Ensuite, si vous vérifiez depuis l'intérieur du conteneur, il devrait y avoir www-data ...
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
Était là
Je ne sais pas si c'est la bonne réponse, mais j'ai eu l'idée de créer un utilisateur vagabond avec un UID de 33 à l'extérieur du conteneur et de changer le propriétaire du dossier d'images en 33. Cela me convient parfaitement. Je veux dire, je n'ai pas réussi à part ça
$useradd -u 33 www-data -g vagrant
$chown www-data images
Autre https://gtrt7.com/blog/nginx/docker_userid_share#3docker-composeyml Il semble que vous pouvez faire correspondre du côté docker au lieu du côté vagabond comme ça.
J'ai eu une telle erreur et je n'ai pas compris et je l'ai jeté
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;
Je pense qu'il serait préférable de terminer les relations de fichiers dans le conteneur Docker, mais je n'ai pas trouvé de bon moyen de le faire, alors j'ai abandonné cette fois.
Je n'ai pas assez de connaissances sur Linux, nginx php-fpm, etc. pour creuser un peu plus loin, alors maintenant, lorsque je crée un dossier dans lequel j'ai téléchargé des fichiers avec php, je changerai les autorisations le cas échéant, je continuerai avec cette méthode et reviendrai quand je serai plus fort. C'était.
S'il vous plaît laissez-moi savoir s'il existe un bon moyen ...
Recommended Posts