Docker-compose Nginx php-fpm 文件未找到以下是如何找到问题的方法在大多数情况下的问题

我有一个简单的docker-compose配置,带有php-fpm和nginx,我看不到任何php文件。当我转到本地主机时,它显示文件未找到。

我尝试了在网上能找到的所有东西,但我尝试过的所有方法都失败了。它适用于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 for php:

FROM php:5.6-fpm
EXPOSE 9000

my default.conf for 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

任何想法将不胜感激。我敢肯定有些东西我没有得到。提前致谢。


答案 1

以下是如何找到问题的方法

  1. 使用自定义打开nginx调试模式,例如:command

docker-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.conferror_log
error_log "/var/log/nginx/error.log" debug;
  1. (重新)启动“Web”容器:
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

在大多数情况下的问题

您尚未设置,或者您正在 和 中使用不同的目录结构。如果要使用与必须设置“fpm结构”不同的结构,如下所示:webphp-fpmfastcgi_param SCRIPT_FILENAME

如果你的 docker-compose.yml 包含如下内容:

phpfpm:
    image: php:fpm
    volumes:
        - "~/www/project:/var/www/html/user/project"
#                        ^^^^^^^^^^^^^^^^^^^^^^^^^^ the path in the php-fpm container

您必须在容器中的“site.conf”中设置此项:nginx

fastcgi_param SCRIPT_FILENAME /var/www/html/user/project$fastcgi_script_name;
#                             ^^^^^^^^^^^^^^^^^^^^^^^^^^

答案 2

终于找到了:

我在 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"

nginx default.conf 文件中的绝对根(此处为“/usr/share/nginx/html”)也必须在 docker-compose 的 php 部分中进行设置(之前仅在 nginx 下)

这是一种解脱;)


推荐