Docker部署Laravel项目时Nginx访问异常问题求助
问题排查步骤
端口占用排查
你配置的Nginx容器端口映射为80:80,如果本地宿主机80端口被其他服务(如本地安装的Nginx、Apache、其他Web服务)占用,Docker启动时会自动将容器80端口映射到随机的高位端口(比如8000)。执行命令docker compose ps查看server服务的端口映射列,如果显示为0.0.0.0:8000->80/tcp即可确认该问题。
解决方式:要么停止本地占用80端口的服务,要么直接修改docker-compose.yml中server的ports配置为'8000:80',主动指定对外暴露端口为8000。Nginx配置挂载校验
你挂载的Nginx配置目录是./Docker/nginx/:/etc/nginx/conf.d/,Nginx默认只会加载conf.d目录下后缀为.conf的配置文件:- 确认
./Docker/nginx目录下的配置文件名后缀为.conf(比如命名为default.conf,如果文件名是nginx.txt等非.conf后缀不会生效) - 执行
docker compose exec server cat /etc/nginx/conf.d/你的配置文件名,确认配置内容正确挂载到了容器内 - 执行
docker compose exec server nginx -t校验Nginx配置是否存在语法错误,如果返回success说明配置合法
- 确认
Laravel权限配置
Laravel要求storage和bootstrap/cache目录具备写权限,权限不足会导致访问时报500错误:
在本地项目的src目录下执行chmod -R 777 storage bootstrap/cache临时测试权限问题,正式环境建议在php的Dockerfile中配置对应目录的所属用户为www-data。服务启动顺序校验
Nginx启动时如果PHP服务还未初始化完成,会导致PHP请求转发失败。可以先停止所有服务docker compose down,再按顺序启动:docker compose up -d php # 等待2-3秒后执行后续命令 docker compose up -d server mysql日志排查
如果以上步骤未解决问题,查看服务日志定位具体错误:- Nginx日志:
docker compose logs server - PHP服务日志:
docker compose logs php
- Nginx日志:
内容的提问来源于stack exchange,提问作者Afshin Tavakolian

