mik*_*mik 10 php nginx http-status-code-404 docker docker-compose
我有一个简单的docker-compose配置php-fpm和nginx,我看不到任何php文件.当我转到localhost时,它显示File Not Found.
我尝试了我能在网上找到的所有东西,但我尝试过的一切都失败了.它适用于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"
Run Code Online (Sandbox Code Playgroud)
这是我的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"
Run Code Online (Sandbox Code Playgroud)
然后我的dockerfile for php:
FROM php:5.6-fpm
EXPOSE 9000
Run Code Online (Sandbox Code Playgroud)
我的nginx的default.conf:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
主文件夹的pwd是:
/media/revenge/share/PROJECTS/docker_images/php7-nginx
Run Code Online (Sandbox Code Playgroud)
文件层次结构是:
??? docker-compose.yml
??? html
? ??? index.php
??? nginxdir
? ??? default.conf
??? phpdir
? ??? dockerfile
? ??? php.ini
Run Code Online (Sandbox Code Playgroud)
整个文件夹是chmod 777
任何想法将不胜感激.我确信有一些我没有得到的东西.提前致谢.
Kri*_*czi 13
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;']
Run Code Online (Sandbox Code Playgroud)
site.conf"文件(在这个例子中它是~/www/project/vhost.conf文件)通过error_log(在末尾添加"debug"字)打开调试模式:error_log "/var/log/nginx/error.log" debug;
Run Code Online (Sandbox Code Playgroud)
docker-compose stop web
docker-compose up -d web
Run Code Online (Sandbox Code Playgroud)
docker-compose ps
Run Code Online (Sandbox Code Playgroud)
/var/log/nginx/error.log文件.在大多数情况下的问题
您尚未设置或在"web"和"php-fpm"中使用不同的目录结构.如果你想使用不同的结构,你必须在这个fastcgi_param SCRIPT_FILENAME地方设置"fpm结构" ,如下所示:
泊坞窗,compose.yml
phpfpm:
image: php:fpm
volumes:
- "~/www/project:/var/www/html/user/project"
Run Code Online (Sandbox Code Playgroud)
"site.conf"
fastcgi_param SCRIPT_FILENAME /var/www/html/user/project$fastcgi_script_name;
Run Code Online (Sandbox Code Playgroud)
终于找到了:
我在 docker-compose 的 PHP 部分中缺少这一行:
“./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"
Run Code Online (Sandbox Code Playgroud)
nginx default.conf 文件中的绝对根目录(此处为“/usr/share/nginx/html”)也必须在 docker-compose 的 php 部分中设置(之前仅在 nginx 下)
那是一种解脱 ;)
| 归档时间: |
|
| 查看次数: |
16356 次 |
| 最近记录: |