[英]Docker nginx php-fpm not serving php
我正在嘗試設置 nginx 和 php-fpm 圖像,以便為 Laravel 應用程序協同工作。 這是我的設置:
docker-compose.yml
version: "3.8"
services:
server:
container_name: nginx
build:
context: .
dockerfile: docker/nginx/Dockerfile
volumes:
- ./src/public:/var/www/html/public
ports:
- "8888:80"
depends_on:
- php
networks:
- laravel_net
php:
container_name: php
build:
context: .
dockerfile: docker/php/Dockerfile
ports:
- "9000:9000"
volumes:
- ./src:/var/www/html
networks:
- laravel_net
networks:
laravel_net:
driver: 'bridge'
Nginx
FROM nginx:stable-alpine
# puts app.conf into the container as /etc/nginx/nginx.conf
# has by default this: include /etc/nginx/conf.d/*.conf;
COPY docker/nginx/conf.d/*.conf /etc/nginx/conf.d/
WORKDIR /var/www/html
COPY ./src/public /var/www/html/public
docker/nginx/conf.d/app.conf
server {
listen 80;
server_name laravel.local;
index index.php index.html;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
root /var/www/html/public;
location / {
try_files $uri /index.php$is_args$args;
}
location ~ \.php {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_index index.php;
fastcgi_pass php:9000;
}
}
PHP
FROM php:8.1-fpm-alpine
WORKDIR /var/www/html
COPY ./src /var/www/html
EXPOSE 9000
在 src 文件夾內是 laravel 應用程序應該存在的地方所以現在我只是在公共目錄上輸出 phpinfo() 只是為了檢查一切是否按預期工作 src/public/index.php
<?php
phpinfo();
如果我運行docker-compose up --build
和docker ps
我可以看到容器正在運行
% docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
abc123 laravel_server "/docker-entrypoint.…" 8 seconds ago Up 6 seconds 0.0.0.0:8888->80/tcp nginx
abc456 laravel_php "docker-php-entrypoi…" 8 seconds ago Up 7 seconds 0.0.0.0:9000->9000/tcp php
同樣在docker-compose exec server /bin/sh
和docker-compose exec php /bin/sh
我可以看到容器內的 index.php 文件
docker-compose exec server sh
/var/www/html # cat public/index.php
<?php
phpinfo();
/var/www/html # ls -la public
total 12
drwxr-xr-x 2 root root 4096 Feb 12 13:41 .
drwxr-xr-x 1 root root 4096 Feb 12 13:41 ..
-rw-r--r-- 1 root root 18 Feb 12 12:51 index.php
docker-compose exec php sh
/var/www/html # ls -lah public/
total 4K
drwxr-xr-x 3 root root 96 Feb 12 13:42 .
drwxr-xr-x 3 root root 96 Feb 10 21:28 ..
-rw-r--r-- 1 root root 18 Feb 12 13:42 index.php
/var/www/html # cat public/index.php
<?php
phpinfo();
但是,當我嘗試從瀏覽器訪問http://localhost:8888
時,我得到默認的Welcome to nginx! 頁。 任何想法我做錯了什么?
我認為問題是 nginx 配置。 您正在將app.conf
復制到/etc/nginx/conf.d/
但已經存在默認配置/etc/nginx/conf.d/default.conf
。 因為您看到的是默認的 nginx 頁面,所以我假設使用的是默認頁面。
嘗試將app.conf
重命名為default.conf
或將復制命令更改為
COPY docker/nginx/conf.d/app.conf /etc/nginx/conf.d/default.conf
根據其他答案的評論:
根本沒有配置文件的優先級。 它們在運行時都變成了巨型 NGINX 配置時間。
在您的情況下,默認 NGINX 配置將偵聽端口 80 作為默認服務器名稱。 這是配置默認“歡迎使用 NGINX”頁面的地方。
在您的應用程序配置中,您將server_name
設置為laravel.local
。 將其作為主機標頭發送curl -v -H "Host: laravel.local" 127.0.0.1:8888
將讓 NGINX 從您的app.conf
中為這個特定的主機名選擇服務器配置。
您可以將其添加到您的客戶端/etc/hosts/
文件中,以使其在您的 web 瀏覽器中運行。
127.0.0.1 laravel.local
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.