首页 > 解决方案 > 我正在尝试将docker用于带有ngnix的php5.6,但配置存在问题

问题描述

您好,我需要在本地机器上设置 php5.6。以下是 docker-compose.yml 文件

  version: '3'

networks:
  laravel:

services:
  nginx:
    image: nginx:stable-alpine
    container_name: nginx
    ports:
      - "8000:80"
    volumes:
      - ./src:/var/www
      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - php
    networks:
      - laravel


  php:
    image: gotechnies/php-5.6-alpine
    container_name: php
    volumes:
      - ./src:/var/www
    ports:
      - "9000:9000"
    networks:
      - laravel

ngnix 配置文件

server {
    listen 80;
    index index.php index.html;
    server_name localhost;
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    root /var/www/public;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
}

运行 docker-compose up -d 命令后,输出如下。

在此处输入图像描述

但是当我尝试访问http://localhost:8000时,我无法呈现页面。

标签: phpapachedockerdocker-compose

解决方案


要使用 NGINX 运行 PHP5.6,您需要执行以下操作:

目录布局。所有的网络文件都在你的本地src/目录中

在此处输入图像描述

对于nginx/default.conf使用以下内容:

server {
    listen 80;
    index index.php index.html;
    server_name localhost;
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    root /var/www/html;

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
}

对于src/index.php(测试以确保 PHP 正常工作)

<? echo phpinfo(); ?>

对于您的 docker-compose.yml,我删除了很多您不需要的东西:

version: "3"

services:
  nginx:
    image: nginx:latest
    ports:
        - "8080:80"
    volumes:
      - ./src/:/var/www/html
      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - php

  php:
    image: mikolatero/php5.6-fpm-alpine
    volumes: 
      - ./src/:/var/www/html

执行docker-compose up。导航到http://localhost:8080/index.php,您应该会看到 PHP 信息页面:

在此处输入图像描述

改变了什么?

在这种情况下,我选择了最新的 NGINX 并为 PHP5.6-FPM 找到了一个很好的图像并将其用于堆栈。

对于挂载的卷,我将目录移动到与 Docker Compose 文件相同的上下文中。没有必要,但从笔记本电脑运行时可能更便携。您安装的 Web 源可能/应该是您的 Web 存储库的位置。我还使用了 NGINX 映像中 Web 文件的众所周知的位置/var/www/html

PHP5.6-FPM 与 Web 源安装到同一目录,因此 PHP 可用于该目录中的文件。

最后,我去掉了networksas,除非你有特定的原因,否则没有必要,因为这些图像将使用默认的 Docker 网络。


推荐阅读