Lors de l'utilisation de nginx etc. avec Docker, tout d'abord, connaissance de Linux ... (commandement)

Lors de l'utilisation de nginx etc. avec Docker ou Vagrant, tout d'abord, connaissance de Linux ... (commandement)

1. Origines

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

2. Environnement

・ 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

3. Où j'étais accro

J'ai été sans cesse troublé par cette erreur PHP sur une ligne

upload.php



move_uploaded_file($_FILES['image']['tmp_name'], $savePath);

SnapCrab_NoName_2020-1-13_17-51-41_No-00.jpg

Permisson denied ......

4.1 Ce que j'ai fait en premier

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.

4.2 Solution

Vérifiez l'utilisateur avec phpinfo. SnapCrab_NoName_2020-1-13_18-30-53_No-00.jpg

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.

Que devrais-je faire

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à

Que faire après tout

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 ne sais pas honnêtement

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

Lors de l'utilisation de nginx etc. avec Docker, tout d'abord, connaissance de Linux ... (commandement)
Utilisation de Docker (Hyper-V) avec PyCharm sur Windows 10 (à partir d'août 2017)
Obtenez le nom d'hôte du PC hôte avec Docker sous Linux
Lors de l'utilisation d'optparse avec iPython
CHEMIN lors de l'utilisation de l'environnement virtuel ANACONDA avec Pycharm (à partir de Mac 2020/10/03)