【问题标题】:php-fpm & nginx in separated docker container, can not execute .php filephp-fpm 和 nginx 在分离的 docker 容器中,无法执行 .php 文件
【发布时间】:2017-02-19 21:41:23
【问题描述】:

我想在一台机器上用 docker 设置一个完全 LNMP 环境。但是分离的 php-fpm 和 nginx 容器有问题。

我所做的是:

  1. 从 docker.io 拉取图像:

    docker pull php:7.1-fpm

    docker拉nginx

  2. 使用图片运行:

    docker run -d --name php-fpm -v /data/Docker/php-fpm/configs/:/usr/local/etc/php-fpm.d -v /data/Docker/nginx/html: /var/www/html php:7.1-fpm

    docker run -d --name nginx -v /data/Docker/nginx/configs/:/etc/nginx -v /data/Docker/nginx/html:/var/www/html -p 80:80 - -link php-fpm nginx

所有目录和文件都是755权限。

配置文件如下:

nginx.conf

server {
    listen  80  default_server;
    server_name SkyEyeLab;
    root    /var/www/html;

    fastcgi_read_timeout 90;
    location ~ \.php {
    fastcgi_pass    php-fpm:9000;
    }
}

还有php-fpm.conf(一些重要的配置部分):

listen 0.0.0.0:9000
listen.allowed_clients = any

然后我检查了 nginx & php-fpm 的环境:

[root@w-Lab01 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                         NAMES
6faf4a4b4f7e        nginx               "nginx -g 'daemon off"   19 minutes ago      Up 19 minutes       0.0.0.0:80->80/tcp, 443/tcp   nginx
9a6caff831d3        php:7.1-fpm         "php-fpm"                20 minutes ago      Up 20 minutes       9000/tcp                      php-fpm
[root@w-Lab01 ~]# docker exec 6faf4a4b4f7e ping -c3 php-fpm
PING php-fpm (172.17.0.2): 56 data bytes
64 bytes from 172.17.0.2: icmp_seq=0 ttl=64 time=0.081 ms
64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.018 ms
64 bytes from 172.17.0.2: icmp_seq=2 ttl=64 time=0.041 ms
--- php-fpm ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.018/0.047/0.081/0.026 ms
[root@w-Lab01 ~]# docker exec 9a6caff831d3 ss -apn
Netid  State      Recv-Q Send-Q     Local Address:Port       Peer Address:Port 
tcp    LISTEN     0      128                    *:9000                  *:*      users:(("php-fpm",pid=1,fd=7))

一切似乎都很好。然后我在 /data/Docker/nginx/html 下创建一个.php(它被安装到 nginx 的 /var/www/html 目录),内容如下:

<?php
phpinfo();
?>

然后在网络浏览器中访问http://localhost:80/a.php。 但是我只有一个空页面,我检查了 nginx 的 access.log :

[root@w-Lab01 ~]# docker logs 6faf4a4b4f7e
220.181.171.120 - - [11/Oct/2016:10:25:11 +0000] "GET /a.php HTTP/1.1" 200 31 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:49.0) Gecko/20100101 Firefox/49.0"
220.181.171.120 - - [11/Oct/2016:10:25:12 +0000] "GET /a.php HTTP/1.1" 200 31 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:49.0) Gecko/20100101 Firefox/49.0"
220.181.171.120 - - [11/Oct/2016:10:31:58 +0000] "GET /a.php HTTP/1.1" 200 31 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:49.0) Gecko/20100101 Firefox/49.0"
220.181.171.120 - - [11/Oct/2016:10:31:59 +0000] "GET /a.php HTTP/1.1" 200 31 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:49.0) Gecko/20100101 Firefox/49.0"

似乎a.php 已正确解析和执行。但是为什么我在网络浏览器中看不到 phpinfo() 结果?

【问题讨论】:

    标签: php nginx docker


    【解决方案1】:

    也许,如果你想在 nginx conf 中使用名称“php-fpm”,你需要像这样链接容器:

    docker run -d --name php-fpm -v /data/Docker/php-fpm/configs/:/usr/local/etc/php-fpm.d -v /data/Docker/nginx/html:/var/www/html php:7.1-fpm
    

    之后:

     docker run -d --name nginx --link php-fpm:php-fpm -v /data/Docker/nginx/configs/:/etc/nginx -v /data/Docker/nginx/html:/var/www/html -p 80:80 --link php-fpm nginx
    

    【讨论】:

      【解决方案2】:

      好吧,在我更改了 nginx 的配置文件之后:

      server {
          listen  80  default_server;
          server_name SkyEyeLab;
          root    /var/www/html;
      
          fastcgi_read_timeout 90;
          location ~ \.php {
          fastcgi_pass    php-fpm:9000;
          }
      }
      

      server {
          listen  80  default_server;
          server_name SkyEyeLab;
          root    /var/www/html;
      
          fastcgi_read_timeout 90;
          location ~ \.php {
          fastcgi_pass    php-fpm:9000;
          include fastcgi.conf;
          }
      }
      

      一切顺利。

      fastcgi.conf 是环境配置文件。你可以查看你的nginx的config目录下(通常是/etc/nginx),看看里面是否有fastcgi.conf或者fastcgi_param。

      【讨论】:

        猜你喜欢
        • 2021-04-08
        • 2019-04-13
        • 2015-04-20
        • 1970-01-01
        • 2018-07-17
        • 2021-02-23
        • 2021-04-02
        • 2017-06-05
        • 1970-01-01
        相关资源
        最近更新 更多