我的Laravel Docker Compose文件异常,请求协助排查访问失效问题
排查Docker Compose环境无法访问的步骤
1. 检查Nginx站点配置
你的Nginx配置目录./docker-compose/nginx/conf.d下的站点配置文件(如default.conf)必须正确配置反向代理规则,才能将PHP请求转发到PHP容器。示例配置如下:
server { listen 80; index index.php index.html; server_name localhost; # 这里要替换成你项目的入口文件所在目录,比如Laravel的public、ThinkPHP的public等 root /var/www/public; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; # 用Docker Compose服务名`php`访问PHP容器,默认FPM端口为9000 fastcgi_pass php:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; } }
- 重点确认
root路径是否匹配你的项目结构 - 确保
fastcgi_pass指向php:9000,这是Docker同网络内服务的访问方式
2. 验证PHP容器的FPM状态
PHP容器必须运行PHP-FPM服务才能处理Nginx转发的请求:
- 进入PHP容器检查FPM进程:
docker exec -it cumax-php-db bash ps aux | grep php-fpm
- 检查你的PHP镜像构建文件(
./docker-compose/php-81/build/Dockerfile)是否基于FPM镜像,比如:
FROM php:8.1-fpm-alpine # 安装所需扩展,比如pdo_mysql RUN docker-php-ext-install pdo_mysql # 其他自定义配置...
如果使用的是php:8.1-cli版本镜像,Nginx无法转发请求,必须更换为FPM版本。
3. 检查容器运行状态与端口映射
- 确认所有服务正常启动:
docker-compose ps
确保php、nginx等服务状态为Up
- 验证Nginx端口映射是否生效:
curl http://localhost:8070
如果返回502 Bad Gateway,说明Nginx无法连接PHP-FPM;返回404则是文件路径或权限问题。
4. 调整文件权限
PHP容器内的项目目录权限可能导致无法读取文件,执行以下命令修正:
docker exec -it cumax-php-db chown -R www-data:www-data /var/www
(部分镜像可能使用nobody用户,需根据实际情况调整)
5. 通过日志定位具体问题
- 查看Nginx错误日志:
docker logs cumax-nginx
- 查看PHP容器日志:
docker logs cumax-php-db
日志会明确显示错误原因,比如连接超时、文件不存在、权限不足等。
内容的提问来源于stack exchange,提问作者lostForAWHile
相关产品推荐
相关产品推荐

