У меня есть простая конфигурация 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
Любая идея будет принята с благодарностью. Я уверен, что есть кое-что, чего я не получил. Заранее спасибо.
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;']
site.conf
«файл (в этом примере это ~/www/project/vhost.conf
файл) Включите режим отладки с помощью error_log
(добавить слово «отладка» в конце):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
файл.Проблема в большинстве случаев
Вы еще не установили или используете другую структуру каталогов в «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;
Наконец-то нашел это:
Мне не хватало этой строки в томе раздела 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)
Это облегчение 😉
В моем случае объемы: php и nginx указывали на правильный (и, следовательно, один и тот же) каталог. Но в моем конфиге nginx был NGINX_SERVER_ROOT: указывал неправильный путь.
Поэтому не забудьте проверить все тома и настройки корневого каталога. Некоторые из них легко пропустить.
Вчера обновление Docker хиты в — который был установлен. Проблема в зависимости от этого обновления заключается в том, что (vEthernet (DockerNAT)) Сеть был изменен. Таким образом, мой брандмауэр (в моем случае Kaspersky) сбрасывает сетевой брандмауэр на «общедоступный», а не на «надежный».
Я разобрался в этом по открытойDocker -> Настройки -> Общие устройства«. На первый взгляд все выглядит нормально. На каждом устройстве была отмечена галочка. Мне нужно было предоставить общий доступ. Затем я попытался снова отключить и включить общие устройства. При повторном включении общего устройства появляется ошибка по умолчанию» Брандмауэр блокирует общий доступ к файлам между Windows и контейнерами. Смотрите документацию для получения дополнительной информации. «Подошел. -> ИДЕАЛЬНО !!. Совместно используемое устройство больше не может получить доступ к файлам, но Docker остается в состоянии, когда все в порядке.
Так что я мог бы это исправить:
docker-compose up
и все работает как очарование. Мои файлы могут быть доступны снова.