Docker-compose файл Nginx php-fpm не найден

У меня есть простая конфигурация docker-compose с php-fpm и nginx, и я не вижу ни одного php-файла. Когда я иду на localhost, он показывает файл не найден.

Я перепробовал все, что мог найти в сети, но все, что я пробовал, провалилось.
Он отлично работает для HTML, но не для файлов PHP. Кажется, это проблема пути или что-то в этом роде.

Я сталкиваюсь с этой ошибкой, когда я 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"

Вот мой 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"

Тогда мой dockerfile для php:

FROM php:5.6-fpm
EXPOSE 9000

мой default.conf для 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 основной папки:

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

Файловая иерархия:

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

Вся папка chmod 777

Любая идея будет принята с благодарностью. Я уверен, что есть кое-что, чего я не получил. Заранее спасибо.

9

Решение

  1. Включите режим отладки nginx с пользовательским commandНапример:

докер-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;']
  1. Редактировать свойsite.conf«файл (в этом примере это ~/www/project/vhost.conf файл) Включите режим отладки с помощью error_log (добавить слово «отладка» в конце):
error_log "/var/log/nginx/error.log" debug;
  1. (Пере) запустите «веб» контейнер:
docker-compose stop web
docker-compose up -d web
  1. Проверьте контейнеры, все ли контейнеры работают?
docker-compose ps
  1. Тест в браузере
  2. «Подключиться» и просмотреть или скачать ( http://blog.dcycle.com/blog/ae67284c/docker-compose-cp ) и просмотреть /var/log/nginx/error.log файл.

Проблема в большинстве случаев

Вы еще не установили или используете другую структуру каталогов в «web» и «php-fpm». Если вы хотите использовать другую структуру, чем вы должны установить «структуру fpm» на fastcgi_param SCRIPT_FILENAME место, как это:

докер-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;
6

Другие решения

Наконец-то нашел это:

Мне не хватало этой строки в томе раздела PHP в docker-compose:

«./Html:/usr/share/nginx/html»

вот как должна выглядеть 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"

Абсолютный корень (здесь «/ usr / share / nginx / html») в файле nginx default.conf должен был быть также установлен в php-части docker-compose (ранее он был только в nginx)

Это облегчение 😉

3

В моем случае объемы: php и nginx указывали на правильный (и, следовательно, один и тот же) каталог. Но в моем конфиге nginx был NGINX_SERVER_ROOT: указывал неправильный путь.

Поэтому не забудьте проверить все тома и настройки корневого каталога. Некоторые из них легко пропустить.

0

У меня была та же проблема, но она не была решена ни одним из следующих ответов:

Вчера обновление Docker хиты в — который был установлен. Проблема в зависимости от этого обновления заключается в том, что (vEthernet (DockerNAT)) Сеть был изменен. Таким образом, мой брандмауэр (в моем случае Kaspersky) сбрасывает сетевой брандмауэр на «общедоступный», а не на «надежный».

Я разобрался в этом по открытойDocker -> Настройки -> Общие устройства«. На первый взгляд все выглядит нормально. На каждом устройстве была отмечена галочка. Мне нужно было предоставить общий доступ. Затем я попытался снова отключить и включить общие устройства. При повторном включении общего устройства появляется ошибка по умолчанию» Брандмауэр блокирует общий доступ к файлам между Windows и контейнерами. Смотрите документацию для получения дополнительной информации. «Подошел. -> ИДЕАЛЬНО !!. Совместно используемое устройство больше не может получить доступ к файлам, но Docker остается в состоянии, когда все в порядке.

Так что я мог бы это исправить:

  • Задавать (vEthernet (DockerNAT)) Сеть как снова доверял в моих настройках Kaspersky «Firewall — Network».
  • Перезапустил мой докер-контейнер с помощью docker-compose up и все работает как очарование. Мои файлы могут быть доступны снова.
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector