簡體   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