Ich habe eine einfache Docker-Compose-Konfiguration mit PHP-Fpm und Nginx, und ich kann keine PHP-Datei sehen. Wenn ich zu localhost gehe, wird File Not Found angezeigt.
Ich habe alles versucht, was ich im Internet finden konnte, aber alles, was ich versucht habe, ist fehlgeschlagen. Es funktioniert gut für HTML, aber nicht für PHP-Dateien. Scheint ein Pfadproblem zu sein oder so ähnlich.
Ich stoße auf diesen Fehler, wenn ich docker-compose logs
:
project3-php_1 | 172.17.0.5 - 29/Mar/2016:13:29:12 +0000 "GET /index.php" 404
project3-front_1 | 172.17.0.1 - - [29/Mar/2016:13:29:12 +0000] "GET / HTTP/1.1" 404 27 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36"
project3-front_1 | 2016/03/29 13:29:12 [error] 8#8: *3 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 172.17.0.1, server: localhost, request: "GET / HTTP/1.1", upstream: "fastcgi://172.17.0.2:9000", Host: "localhost"
Hier ist mein Docker-Compose:
project3-front:
image: nginx
ports:
- "80:80"
links:
- "project3-php:project3-php"
volumes:
- ".:/home/docker"
- "./nginxdir/default.conf:/etc/nginx/conf.d/default.conf"
- "./html:/usr/share/nginx/html"
project3-php:
build: phpdir
volumes:
- ".:/home/docker:rw"
- "./html:/var/www/html"
ports:
- "9000:9000"
working_dir: "/home/docker"
Dann meine Andockdatei für PHP:
FROM php:5.6-fpm
EXPOSE 9000
meine default.conf für nginx:
server {
listen 80;
server_name localhost;
index index.php index.html;
error_log /var/log/nginx/error.log warn;
access_log /var/log/nginx/access.log;
root /usr/share/nginx/html;
location ~ \.php$ {
fastcgi_pass project3-php:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
pwd des Hauptordners ist:
/media/revenge/share/PROJECTS/docker_images/php7-nginx
Die Dateihierarchie lautet:
├── docker-compose.yml
├── html
│ ├── index.php
├── nginxdir
│ ├── default.conf
├── phpdir
│ ├── dockerfile
│ └── php.ini
Der gesamte Ordner ist chmod 777
Jede Idee wäre sehr dankbar. Ich bin mir sicher, dass es etwas gibt, was ich nicht verstanden habe. Danke im Voraus.
command
ein, z.docker-compose.yml
web:
image: nginx
volumes:
- "~/www/project:/var/www"
- "~/www/project/vhost.conf:/etc/nginx/conf.d/site.conf"
# Add this row:
command: [nginx-debug, '-g', 'daemon off;']
site.conf
" -Datei (in diesem Beispiel ist es die ~/www/project/vhost.conf
-Datei). Schalten Sie den Debug-Modus über den error_log
ein (fügen Sie am Ende "debug" -Wort hinzu):error_log "/var/log/nginx/error.log" debug;
docker-compose stop web
docker-compose up -d web
docker-compose ps
/var/log/nginx/error.log
-Datei.Das Problem in den meisten Fällen
Sie haben noch keine Einstellungen vorgenommen oder verwenden eine andere Verzeichnisstruktur in "web" und "php-fpm". Wenn Sie eine andere Struktur verwenden möchten, müssen Sie die "fpm-Struktur" an der Stelle fastcgi_param SCRIPT_FILENAME
wie folgt festlegen:
docker-compose.yml
phpfpm:
image: php:fpm
volumes:
- "~/www/project:/var/www/html/user/project"
"site.conf"
fastcgi_param SCRIPT_FILENAME /var/www/html/user/project$fastcgi_script_name;
Endlich gefunden:
Ich habe diese Zeile in der Ausgabe von PHP von docker-compose vermisst:
"./html:/usr/share/nginx/html"
so sollte der Docker-Compose aussehen:
project3-front:
image: nginx
ports:
- "80:80"
links:
- "project3-php:project3-php"
volumes:
- ".:/home/docker"
- "./nginxdir/default.conf:/etc/nginx/conf.d/default.conf"
- "./html:/usr/share/nginx/html"
project3-php:
build: phpdir
volumes:
- ".:/home/docker:rw"
- "./html:/var/www/html"
ports:
- "9000:9000"
working_dir: "/home/docker"
Die absolute Wurzel (hier "/ usr/share/nginx/html") in der Datei nginx default.conf musste auch im PHP-Teil von docker-compose gesetzt werden (war vorher nur unter nginx)
Das ist eine Erleichterung ;)
In meinem Fall verweisen die Volumes: von PHP und Nginx auf das richtige (und damit das gleiche) Verzeichnis. Aber in meiner Nginx-Konfiguration gab es einen NGINX_SERVER_ROOT: Der falsche Weg.
Stellen Sie daher sicher, dass Sie alle Volumes und Einstellungen des Stammverzeichnisses noch einmal überprüfen. Einige sind leicht zu übersehen.
Gestern Ein Docker Update trifft in - das installiert wurde. Das Problem, das von diesem Update abhängt, ist, dass das (vEthernet (DockerNAT)) Network geändert wurde. Auf diese Weise setzt meine Firewall (in meinem Fall Kaspersky) meine Netzwerk-Firewall auf "öffentlich" statt auf "vertrauenswürdig" zurück.
Ich habe dies durch Öffnen von " Docker -> Einstellungen -> Shared Devices " herausgefunden. Auf den ersten Blick scheint alles in Ordnung zu sein. Es gab ein "Häkchen" auf jedem Gerät, das ich teilen muss. Als Nächstes versuchte ich, meine freigegebenen Geräte erneut zu deaktivieren und zu aktivieren. Aktivieren Sie mein freigegebenes Gerät erneut mit dem Standardfehler "Eine Firewall blockiert die gemeinsame Nutzung von Dateien zwischen Windows und den Containern. Weitere Informationen finden Sie in der Dokumentation." ergab sich. -> PERFEKT !! . Das freigegebene Gerät kann nicht mehr auf die Dateien zugreifen, Docker bleibt jedoch in dem Zustand, in dem alles in Ordnung ist.
So konnte ich es beheben durch:
docker-compose up
neu gestartet und läuft wie ein Zauber. Auf meine Dateien konnte erneut zugegriffen werden.