繁体   English   中英

我如何在一个容器中使用nginx而在另一个容器中使用php-fpm?

[英]How can I have nginx in one container and php-fpm in another?

我正在尝试创建两个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

这里是Dockerfile./php目录:

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

./code目录中,我有一个名为app.php的文件,其中包含phpinfo()

问题

我运行docker-compose up ,当我尝试打开192.168.99.100 (docker引擎正在运行的docker机器的IP)时,我File not found 我也试过192.168.99.100/app.php ,但它是一样的。

我配置错误的是什么? 我在互联网上看到一个例子,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/

在完成其他答案中建议并在此问题上花了大约六个小时或更长时间之后,我发现我的设置不起作用的原因是因为docker-compose up没有重建你的图像,所以配置在容器是旧版本。

因此,解决这个问题就像docker-compose build一样容易,然后是docker-compose up

抱歉占用了每个人的时间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM