2016-03-29 36 views
5

Mam prostą konfigurację docker-compose z php-fpm i nginx, i nie widzę żadnego pliku php. Kiedy idę do localhost, pokazuje File Not Found.Docker-compose Plik php-fpm Nginx nie został znaleziony

Próbowałem wszystkiego, co mogłem znaleźć w sieci, ale wszystko, co próbowałem, zawiodło. Działa dobrze dla html, ale nie dla plików php. Wydaje się być problemem związanym ze ścieżką lub czymś w tym stylu.

spotykam tego błędu kiedy 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" 

Oto mój doker-komponować:

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" 

Wtedy mój dockerfile dla PHP:

FROM php:5.6-fpm 
EXPOSE 9000 

mój default.conf dla 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 głównego folderu to:

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

Hierarchia plik jest:

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

Cały folder jest chmod 777

Każdy pomysł będzie mile widziane. Jestem pewien, że jest coś, czego nie dostałem. Z góry dziękuję.

Odpowiedz

1

Wreszcie znalazł go:

brakowało mi ten wiersz wolumenu sekcji PHP Döcker-Compose:

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

oto co doker-komponować powinna wyglądać następująco:

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" 

The absolutnej root (tutaj "/ usr/share/nginx/html") miał w pliku nginx default.conf być ustawiony także w części php z docker-co mpose (dopiero pod nginx wcześniej)

To ulga;)

0

Oto w jaki sposób można znaleźć problem

  1. Włączyć tryb nginx debugowania ze zwyczajem command, np:

dokowanie.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. zmieniać swoich "site.conf" plik (w tym przykładzie jest to ~/www/project/vhost.conf plik) Włączyć tryb debugowania przez "debug" słowo error_log (dodaj u koniec)
error_log "/var/log/nginx/error.log" debug; 
  1. (Re) start "web" pojemnika:
docker-compose stop web 
docker-compose up -d web 
  1. Sprawdź pojemniki, czy wszystkie pojemniki działają?
docker-compose ps 
  1. testowej w przeglądarce
  2. "connect" i wyświetlić lub pobrać (http://blog.dcycle.com/blog/ae67284c/docker-compose-cp) i zobaczyć, jak plik /var/log/nginx/error.log.

Problemem w większości przypadku

Jeszcze nie ustawiony lub używasz inną strukturę katalogów w „sieci” i „PHP-FPM”. Jeśli chcesz użyć inną strukturę niż trzeba ustawić "FPM strukturę" na fastcgi_param SCRIPT_FILENAME miejscu, tak:

doker-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

W moim przypadku woluminy : z php i nginx wskazywały prawidłowy (a więc ten sam) katalog. Ale w moim config nginx był NGINX_SERVER_ROOT: wskazuje niewłaściwy sposób.

Sprawdź więc wszystkie woluminy i ustawienia katalogu głównego. Niektóre są łatwe do przeoczenia.