【问题标题】:Docker nginx php-fpm not serving phpDocker nginx php-fpm 不服务 php
【发布时间】:2022-02-13 17:12:31
【问题描述】:

我正在尝试设置 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 --builddocker 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/shdocker-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! 页面。任何想法我做错了什么?

【问题讨论】:

    标签: php docker nginx docker-compose dockerfile


    【解决方案1】:

    我认为问题在于 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
    

    【讨论】:

    • 成功了,非常感谢! :)
    • 出于好奇,如果 /etc/nginx/nginx.conf 有 /etc/nginx/conf.d/*.conf; 不会同时加载 app.conf 和 default.conf 吗?
    • 我想是的,是的。但是它如何优先考虑我不知道的配置¯\_(ツ)_/¯
    【解决方案2】:

    基于另一个答案的 cmets:

    根本没有配置文件的优先级。它们都在运行时成为巨大的 NGINX 配置时间。

    在您的情况下,默认 NGINX 配置将侦听端口 80 作为默认服务器名称。这是配置默认“欢迎使用 NGINX”页面的地方。

    在您的应用配置中,您将server_name 设置为laravel.local。将此作为主机头 curl -v -H "Host: laravel.local" 127.0.0.1:8888 发送将让 NGINX 从您的 app.conf 中为该特定主机名选择服务器配置。

    您可以将此添加到您的客户/etc/hosts/ 文件中,以使其在您的网络浏览器中运行。

    127.0.0.1 laravel.local

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-18
      • 1970-01-01
      • 2023-01-07
      • 2021-04-02
      相关资源
      最近更新 更多