[英]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
容器的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配置。
這里是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.