如何在一个容器中使用Nginx,在另一个容器中使用php-fpm?

前端之家收集整理的这篇文章主要介绍了如何在一个容器中使用Nginx,在另一个容器中使用php-fpm? 前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我正在尝试创建两个docker容器.一个包含Nginx,另一个包含PHP-fpm.这是我的docker-compose.yml:

version: '2'
services:
  Nginx:
    build: ./Nginx
    ports:
      - "80:80"
      - "443:443"
  fpm:
    build: ./PHP
    volumes:
      - ./PHP/code:/var/www/html/

Nginx

这是我的Nginx容器的Dockerfile:

FROM Nginx:latest RUN rm /etc/Nginx/conf.d/default.conf COPY
./default.conf /etc/Nginx/conf.d/

而且,这是我的default.conf:

server {
    listen  80;

    server_name localhost;
    root /var/www/html;

    error_log /var/log/Nginx/localhost.error.log;
    access_log /var/log/Nginx/localhost.access.log;

    location / {
        # try to serve file directly,fallback to app.PHP
        try_files $uri /app.PHP$is_args$args;
    }

    location ~ ^/.+\.PHP(/|$) {
        fastcgi_pass fpm:9000;
        fastcgi_split_path_info ^(.+\.PHP)(/.*)$;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param HTTPS off;
    }
}

这就是我所有的Nginx配置.

PHP

这是./PHP目录中的Dockerfile:

from PHP:fpm
COPY ./code/ /var/www/html/

在./code目录中,我有一个名为app.PHP文件,其中包含PHPinfo().

问题

我运行docker-compose up,当我尝试打开192.168.99.100(运行docker引擎的docker机器的IP)时,我找不到文件.我也尝试了192.168.99.100/app.PHP,但这是相同的.

我配置错了什么?我在Internet上的一个示例中看到,PHP文件必须位于Nginx容器中,但这没有任何意义,因为据我所知,PHP-fpm是必须有权访问这些文件的过程.

最佳答案
404错误的原因是您的Nginx容器中没有文件.

您必须将链接PHP-FPM容器的相同文件链接Nginx容器:

version: '2'
services:
  Nginx:
    build: ./Nginx
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./PHP/code:/var/www/html/

  fpm:
    build: ./PHP
    volumes:
      - ./PHP/code:/var/www/html/

当请求到达Web服务器时,在Nginx可以将请求传递到PHP-FPM容器之前,文件必须至少存在.您甚至可以将Nginx容器的文件夹设为只读:

version: '2'
services:
  Nginx:
    build: ./Nginx
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./PHP/code:/var/www/html/:ro

  fpm:
    build: ./PHP
    volumes:
      - ./PHP/code:/var/www/html/

猜你在找的Nginx相关文章