本地通过Dockerfile全新安装Laravel后无法显示默认页面
解决Laravel容器化后访问返回ERR_EMPTY_RESPONSE的问题
以下是逐步排查和修复的步骤:
1. 确认容器内服务是否监听指定端口
先获取运行中的容器ID,进入容器检查端口状态:
docker ps docker exec -it <你的容器ID> bash # 检查8080端口监听情况 netstat -tulpn | grep 8080 # 无netstat时用ss命令 ss -tulpn | grep 8080
如果未查到监听8080的进程,说明Web服务未正确启动或端口配置错误。
2. 核对Dockerfile的启动命令配置
Laravel容器化常用两种启动方式,对应检查:
用Artisan Serve启动
必须绑定0.0.0.0(允许外部访问)并使用环境变量PORT:
# 错误写法(固定端口+仅本地监听) CMD ["php", "artisan", "serve", "--host=127.0.0.1", "--port=8000"] # 正确写法 CMD ["sh", "-c", "php artisan serve --host=0.0.0.0 --port=$PORT"]
若之前Dockerfile是固定端口,改成动态端口写法后重新构建镜像运行。
用Nginx+PHP-FPM启动
检查Nginx配置是否监听$PORT,且指向Laravel的public目录:
Nginx配置示例:
server { listen ${PORT} default_server; root /var/www/html/public; index index.php index.html; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
同时确保Dockerfile中正确复制该配置,且启动了Nginx和PHP-FPM进程(比如用supervisord管理多进程)。
3. 查看容器日志定位错误
容器显示运行但服务异常时,日志会给出关键线索:
docker logs <你的容器ID>
常见问题包括:
- PHP扩展缺失(如mbstring、pdo_mysql等Laravel必需扩展)
- storage或bootstrap/cache目录无写入权限
- .env文件未设置
APP_KEY(Laravel启动必备)
4. 验证Laravel环境配置
进入容器后检查APP_KEY是否存在:
php artisan key:generate --show
若输出为空,执行php artisan key:generate生成,同时确认.env中APP_ENV为local(避免生产环境调试限制)。
5. 测试容器内部访问
在容器终端内直接访问服务,确认服务本身是否正常:
curl http://localhost:8080
若容器内访问正常但外部不行,说明服务仅监听127.0.0.1,改为监听0.0.0.0即可解决。
内容的提问来源于stack exchange,提问作者Crys
相关产品推荐
相关产品推荐

