You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Docker Compose关联Nginx与PHP-FPM容器并解决页面显示异常问题

如何通过Docker Compose关联Nginx与PHP-FPM容器并解决页面显示异常问题

兄弟,我太懂你这种跟着教程一步步走,结果页面跳出Nginx默认欢迎页的憋屈感了!我刚学Docker Compose的时候也踩过这个坑,咱们一步步把问题拆解解决掉。

首先,核心问题大概率出在容器网络通信或者Nginx配置没正确转发PHP请求上,咱们从最基础的配置开始排查:

一、先确认你的Docker Compose配置是否正确

我给你一个经过验证的基础配置模板,你可以对比自己的文件:

version: '3.8'
services:
  nginx:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      # 挂载本地代码目录到Nginx的网页根目录
      - ./html:/usr/share/nginx/html
      # 挂载自定义Nginx配置,覆盖默认配置
      - ./nginx.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      # 确保PHP服务先启动(避免时序问题)
      - php
    networks:
      # 加入自定义网络,让容器之间能互相通信
      - app-network

  php:
    image: php:8.2-fpm
    volumes:
      # 同样挂载本地代码目录到PHP的工作目录,和Nginx保持同步
      - ./html:/var/www/html
    networks:
      - app-network

# 定义共享网络
networks:
  app-network:
    driver: bridge

这里要注意几个关键点:

  • 两个容器必须加入同一个自定义网络(app-network),这样它们才能用服务名(比如php)互相通信,而不是靠随机的网络。
  • 本地的./html目录要同时挂载到Nginx和PHP容器里,这样两边访问的是同一套代码,避免出现Nginx能看到文件但PHP找不到的情况。

二、Nginx配置是关键!别让请求走默认路由

你看到默认欢迎页,90%是因为Nginx没把.php结尾的请求转发给PHP-FPM。创建一个nginx.conf文件放在项目根目录,内容如下:

server {
    listen 80;
    server_name localhost;
    # 这个根目录要和Nginx容器里挂载的路径一致
    root /usr/share/nginx/html;
    index index.php index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }

    # 处理所有.php结尾的请求,转发给PHP-FPM
    location ~ \.php$ {
        # 这里的`php`是Docker Compose里PHP服务的名字,容器之间用服务名就能通信
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        # 告诉PHP要执行的文件路径,必须和PHP容器里的代码目录对应
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

重点划重点:fastcgi_pass php:9000里的php必须和你Docker Compose里PHP服务的名称完全一致,不能写错!这是容器之间通信的关键,写错了Nginx就找不到PHP服务,只能返回默认页面。

三、检查你的代码文件和目录

  1. 在项目根目录创建html文件夹,里面放index.php文件,内容就是你要的:
<?php
echo "Hello from PHP!";
?>
  1. 确保本地目录权限没问题,开发环境下可以简单执行chmod -R 755 ./html,让容器能正常读取文件。

四、启动容器并排查问题

  1. 先清理旧容器(避免残留问题):
docker-compose down
  1. 启动服务:
docker-compose up -d
  1. 查看日志找问题:
  • 看Nginx日志:docker-compose logs nginx,如果有类似connect() failed (111: Connection refused) while connecting to upstream,说明Nginx连不上PHP,检查网络或者服务名。
  • 看PHP日志:docker-compose logs php,如果有No such file or directory,说明PHP找不到代码文件,检查挂载路径是否正确。
  1. 可以进Nginx容器测试网络:
docker exec -it [你的Nginx容器ID] ping php

如果能ping通,说明网络没问题;ping不通的话,检查Docker Compose里的网络配置。

为什么会出现Nginx默认页面?

你看到的"Welcome to nginx!"页面,本质是Nginx用了默认的配置文件,没有把PHP请求转发给PHP-FPM,或者你的index.php文件不存在/路径不对,Nginx只能返回它的默认欢迎页。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.08 13:58:05