Bei der Verwendung von Nginx usw. mit Docker vor allem Kenntnisse über Linux ... (Gebot)

Bei der Verwendung von Nginx usw. mit Docker oder Vagrant vor allem Kenntnisse über Linux ... (Gebot)

1. Hintergrund

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

2. Umwelt

・ 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

3. Wo ich süchtig war

Ich war endlos beunruhigt von diesem einzeiligen PHP-Fehler

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 Was ich zuerst getan habe

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.

4.2 Lösung

Überprüfen Sie den Benutzer mit phpinfo. SnapCrab_NoName_2020-1-13_18-30-53_No-00.jpg

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.

Was soll ich machen

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

Was ist doch zu tun?

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 weiß es nicht ehrlich

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

Bei der Verwendung von Nginx usw. mit Docker vor allem Kenntnisse über Linux ... (Gebot)
Verwenden von Docker (Hyper-V) mit PyCharm unter Windows 10 (Stand August 2017)
Rufen Sie den Hostnamen des Host-PCs mit Docker unter Linux ab
Bei Verwendung von optparse mit iPython
PFAD bei Verwendung der virtuellen ANACONDA-Umgebung mit Pycharm (ab Mac 2020/10/03)