2016-03-29 4 views
5

Ich habe eine einfache Docker-komponieren-Konfiguration mit PHP-FPM und Nginx, und ich kann keine PHP-Datei sehen. Wenn ich zu localhost gehe, wird die Datei nicht gefunden angezeigt.Docker-komponieren Nginx php-fpm Datei nicht gefunden

Ich habe alles versucht, was ich im Internet finden konnte, aber alles, was ich versucht habe, ist gescheitert. Es funktioniert gut für HTML, aber nicht für PHP-Dateien. Scheint ein Pfadproblem zu sein, oder so ähnlich.

stoße ich 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 mein Docker-compose ist:

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 ist mein dockerfile für php:

FROM php:5.6-fpm 
EXPOSE 9000 

mein 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 Hauptordner ist:

/media/revenge/share/PROJECTS/docker_images/php7-nginx 

Die Dateihierarchie ist:

├── docker-compose.yml 
├── html 
│   ├── index.php 
├── nginxdir 
│   ├── default.conf 
├── phpdir 
│   ├── dockerfile 
│   └── php.ini 

Die ganze Ordner ist chmod 777

Jede Idee wäre sehr dankbar. Ich bin sicher, da ist etwas, was ich nicht bekommen habe. Danke im Voraus.

Antwort

1

Schließlich fand es:

Ich wurde diese Linie im Volumen von PHP Abschnitt von Docker-compose fehlt:

"./html:/usr/share/nginx/html"

hier ist es, was die docker-compose aussehen sollte:

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 nginx default.conf Datei werden mußte auch in dem pHP-Teil eingestellt von Hafenarbeiter-Co mpose (nur unter nginx vor)

Das ist eine Erleichterung ist;)

0

Hier ist, wie können Sie das Problem

  1. Schalten Sie den nginx Debug-Modus mit benutzerdefinierten command, zB finden:

docker-komponieren.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;'] 
  1. Bearbeiten Sie Ihre "site.conf" Datei (in diesem Beispiel ist es die ~/www/project/vhost.conf Datei) Schalten Sie den Debug-Modus durch die error_log (add bei der "debug" Wort Ende):
error_log "/var/log/nginx/error.log" debug; 
  1. (Re) starten Sie den "web" Container:
docker-compose stop web 
docker-compose up -d web 
  1. Behälter testen, laufen alle Behälter?
docker-compose ps 
  1. -Test in Browser
  2. "Connect" und anzeigen oder herunterladen (http://blog.dcycle.com/blog/ae67284c/docker-compose-cp) und sehen Sie die /var/log/nginx/error.log Datei.

Das Problem in den meisten Fall

Sie haben noch nicht oder Sie verwenden verschiedene Verzeichnisstruktur in "Web" und "php-fpm" gesetzt. Wenn Sie möchten, andere Struktur verwenden, als Sie die "fpm Struktur" an der fastcgi_param SCRIPT_FILENAME Stelle zu setzen haben, wie folgt aus:

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; 
0

In meinem Fall die Bände: von PHP und Nginx zeigten ein korrektes (und daher das gleiche) Verzeichnis. Aber in meiner nginx config gab es einen NGINX_SERVER_ROOT: in die falsche Richtung zeigend.

Überprüfen Sie also alle Volumes und Root-Verzeichniseinstellungen. Einige sind leicht zu übersehen.