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
验证步骤
- 停止并清理现有容器:
docker-compose down -v
- 重新构建并启动服务:
docker-compose up -d --build
- 查看容器运行状态:
docker-compose ps
- 检查服务日志确认无错误:
docker-compose logs nginx_service docker-compose logs php82_service
- 测试访问:
- 项目:
http://localhost:8010 - phpMyAdmin:
http://localhost:7010,登录用户名root、密码toor,主机填写mariadb_service或127.0.0.1:4410
- 项目:
内容的提问来源于stack exchange,提问作者Mojtaba Nematpour
相关产品推荐
相关产品推荐

