Docker-compose Nginx php-fpm文件未找到

hc2pp10m  于 2023-04-28  发布在  PHP
关注(0)|答案(7)|浏览(146)

我用php-fpm和nginx做了一个简单的docker-compose配置,但我看不到任何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"

这是我的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

我的默认.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
任何想法都将不胜感激。我肯定还有什么我没明白的。先谢谢你了。

tquggr8v

tquggr8v1#

这是你如何找到问题

1.使用自定义command打开nginx调试模式,例如:
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.conf文件)通过error_log打开调试模式(在末尾添加“debug”一词):

error_log "/var/log/nginx/error.log" debug;

1.(重新)启动“web”容器:

docker-compose stop web
docker-compose up -d web

1.测试容器,是否所有容器都在运行?

docker-compose ps

1.在浏览器中测试
1.“连接”并查看或下载(http://blog.dcycle.com/blog/ae67284c/docker-compose-cp)并查看/var/log/nginx/error.log文件。

大多数情况下的问题

您还没有设置,或者您在webphp-fpm中使用了不同的目录结构。如果你想使用不同的结构,你必须在fastcgi_param SCRIPT_FILENAME位置设置“fpm结构”,像这样:
如果你的docker-compose。yml包含如下内容:

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

你得把它设置成“现场”。nginx容器中的“conf”:

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

jbose2ul2#

终于找到了:
我在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默认的绝对根目录(这里是“/usr/share/nginx/html”)。在docker-compose的php部分也必须设置conf文件(以前只在nginx下)
那我就放心了)

qmb5sa22

qmb5sa223#

在我的例子中,php和nginx的**volumes:**指向正确的(因此是相同的)目录。但是在我的nginx配置中有一个NGINX_SERVER_ROOT:指错了方向
因此,请确保仔细检查所有卷和根目录设置。有些人很容易被忽视。

8mmmxcuj

8mmmxcuj4#

虽然用/var/www/html/user/project$fastcgi_script_name;替换$document_root$fastcgi_script_name;可能会解决这个问题,但在我看来,更优雅的方法是在默认情况下更改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 /var/www/html;

  location ~ \.php$ {
      fastcgi_pass project3-php:9000;
      fastcgi_index index.php;
      include fastcgi_params;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  }
}

在docker-compose中。yml:

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:/var/www/html"
zsohkypk

zsohkypk5#

我也遇到了同样的问题,但这个问题并没有通过以下任何一个答案得到解决:

昨天一个Docker Update命中中-已安装。取决于此更新的问题是,*(vEthernet(DockerNAT))网络 * 已更改。这样,我的防火墙(在我的情况下卡巴斯基)重置我的网络防火墙为“公共”,而不是“可信”。
我通过打开“Docker-〉设置-〉共享设备”解决了这个问题。乍一看,一切似乎都很好。在我需要共享的每个设备上都有一个“刻度”。接下来,我尝试再次禁用和启用共享设备。通过再次启用我的共享设备,默认错误“防火墙正在阻止Windows和容器之间的文件共享。请参阅documetation了解更多信息。”““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““”””””””””!**。共享设备无法再访问文件,但Docker仍保持正常状态。

    • 所以我可以通过**
  • 在卡巴斯基“防火墙-网络”设置中再次将 *(vEthernet(DockerNAT))网络 * 设置为受信任。
  • 使用docker-compose up重新启动了我的docker容器,一切都运行得很顺利。我的文件可能又被访问了。
xnifntxz

xnifntxz6#

其中一种情况可能是,您正在运行docker容器,并且composer安装/更新了吗
然后运行以下命令重新启动容器

`docker-compose down` `docker-compose up -d`
gijlo24d

gijlo24d7#

这是文件许可。
如果你将一个项目从一台机器复制到另一台机器,很可能由于权限问题,docker无法读取\执行文件。

相关问题