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

Docker部署Nginx+PHP+MariaDB返回502 Bad Gateway求助

问题解决:Docker环境Nginx 502 Bad Gateway及phpMyAdmin无法访问

核心问题分析

你的配置中存在端口映射不匹配的关键错误,导致服务之间无法正常通信:

  • PHP-FPM默认监听容器内9000端口,但你在docker-compose.yml中将主机9010映射到容器9010,同时Nginx配置里尝试连接php82_service:9010,容器内PHP-FPM并未在该端口提供服务,直接导致Nginx无法转发PHP请求,返回502。
  • MariaDB默认容器内端口是3306,你映射的是4410:4410,外部(包括phpMyAdmin)无法连接到数据库服务。
  • phpMyAdmin容器默认使用80端口,你映射的是7010:7010,主机访问7010时无服务响应。

修改后的配置文件

1. 更新docker-compose.yml

version: '3.8'

networks:
    nginx_php82_mariadb_phpmyadmin:

services:
    nginx_service:
        container_name: nginx_container
        image: nginx:stable-alpine
        ports:
            - "8010:8010"
        volumes:
            - ./:/var/www/App
            - ./.docker/Nginx/default.conf:/etc/nginx/conf.d/default.conf
        depends_on:
            - php82_service
            - mariadb_service
        networks:
            - nginx_php82_mariadb_phpmyadmin

    php82_service:
        container_name: php82_container
        build:
            context: ./
            dockerfile: ./.docker/PHP/Dockerfile
        ports:
            - "9010:9000"
        volumes:
            - ./:/var/www/App
        networks:
            - nginx_php82_mariadb_phpmyadmin

    mariadb_service:
        image: mariadb
        container_name: mariadb_container
        ports:
            - "4410:3306"
        volumes:
            - ./.docker/Mariadb:/var/lib/mysql
        command: --default-authentication-plugin=mysql_native_password --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
        environment:
            MYSQL_ROOT_PASSWORD: toor
            MYSQL_PASSWORD: toor
        networks:
            - nginx_php82_mariadb_phpmyadmin

    phpmyadmin_service:
        container_name: phpmyadmin_container
        image: phpmyadmin:latest
        ports:
            - "7010:80"
        environment:
            - PMA_ARBITRARY=1
            - PMA_HOST=mariadb_service
        depends_on:
            - mariadb_service
        networks:
            - nginx_php82_mariadb_phpmyadmin

2. 更新Nginx default.conf

修正fastcgi_pass指向PHP容器的正确端口9000:

server {
    listen 8010;
    index index.php;
    server_name localhost;
    root /var/www/App/public;
    error_log /var/log/nginx/project_error.log;
    access_log /var/log/nginx/project_access.log;

    location / {
       try_files $uri /index.php$is_args$args;
    }

    location ~ ^/index\.php(/|$) {
        fastcgi_pass php82_service:9000;
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        include fastcgi_params;

        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        fastcgi_param DOCUMENT_ROOT $realpath_root;

        fastcgi_buffer_size 128k;
        fastcgi_buffers 4 256k;
        fastcgi_busy_buffers_size 256k;

        internal;
    }

    location ~ \.php$ {
        return 404;
    }
}

3. 检查PHP Dockerfile

确保你的.docker/PHP/Dockerfile使用带FPM的PHP镜像,示例如下:

FROM php:8.2-fpm-alpine

# 安装项目所需扩展
RUN docker-php-ext-install pdo_mysql mysqli

WORKDIR /var/www/App

验证步骤

  1. 停止并清理现有容器:
docker-compose down -v
  1. 重新构建并启动服务:
docker-compose up -d --build
  1. 查看容器运行状态:
docker-compose ps
  1. 检查服务日志确认无错误:
docker-compose logs nginx_service
docker-compose logs php82_service
  1. 测试访问:
    • 项目:http://localhost:8010
    • phpMyAdmin:http://localhost:7010,登录用户名root、密码toor,主机填写mariadb_service或127.0.0.1:4410

内容的提问来源于stack exchange,提问作者Mojtaba Nematpour

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 08:52:02