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

Docker部署Symfony项目时Nginx返回502 Bad Gateway故障求助

Docker环境Nginx返回502 Bad Gateway问题排查与解决

问题根因定位

根据你提供的Nginx错误日志connect() failed (111: Connection refused) while connecting to upstream,可知问题是Nginx无法与PHP容器的9000端口建立连接,常见原因有三个:

  • PHP容器内php-fpm进程未正常启动:你的PHP容器启动命令会先执行composer install拉取Symfony依赖,若依赖拉取慢、执行失败,会导致php-fpm迟迟不启动
  • php-fpm监听地址配置错误:部分默认php-fpm配置会监听127.0.0.1:9000,仅允许容器内部访问,Docker内部网络的Nginx请求会被拒绝
  • 服务启动顺序问题:depends_on仅保证容器启动顺序,不保证PHP服务完全就绪,Nginx启动后PHP还没完成初始化

解决方案

1. 验证PHP服务状态

先执行以下命令查看PHP容器日志,确认php-fpm是否正常启动:

docker logs php

若日志显示composer执行报错,可先在本地Symfony项目目录执行composer install提前装好依赖,再启动容器避免启动阻塞。

2. 修复php-fpm监听配置

修改php/Dockerfile,添加配置强制php-fpm监听0.0.0.0:9000,允许Docker内部网络访问:

# 在现有Dockerfile末尾EXPOSE 9000前添加以下行
RUN echo "listen = 0.0.0.0:9000" >> /usr/local/etc/php-fpm.d/www.conf

3. 优化容器启动顺序

修改docker-compose.yml,给PHP服务添加健康检查,确保php-fpm就绪后再启动Nginx:

services:
  php:
    build:
      context: ./php
    ports:
      - "9000:9000"
    volumes:
      - ../symfony:/var/www
    # 新增健康检查配置
    healthcheck:
      test: ["CMD-SHELL", "apt-get update && apt-get install -y netcat && nc -z 127.0.0.1 9000 || exit 1"]
      interval: 5s
      timeout: 3s
      retries: 10

  nginx:
    container_name: "nginx"
    build:
      context: ./nginx
    volumes:
      - ../symfony:/var/www
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf
      - ./logs:/var/log
    # 修改依赖配置,等待PHP健康检查通过
    depends_on:
      php:
        condition: service_healthy
    ports:
      - "8081:80"

注:PHP容器的9000端口映射到宿主机不是必须项,仅需内部网络访问的话可删除ports配置。

4. 重启服务验证

执行以下命令重建容器并启动:

docker-compose down -v && docker-compose up --build

等待所有服务启动完成后,访问http://localhost:8081即可正常访问。

内容的提问来源于stack exchange,提问作者romain DS

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 04:45:05