Laravel修改后Swoole不生效及Docker连接拒绝问题求助
使用重载命令替代停启
大部分Laravel-Swoole扩展都支持重载Worker进程的命令,直接执行:php artisan swoole:http reload
这个命令会重启Worker进程保留Master进程,比完全停启服务更快,且能识别代码修改。开发环境开启自动重载
在Swoole配置文件(通常是config/swoole_http.php)中添加监听配置,实现代码修改后自动重载:
return [ // 其他配置... 'reloadable' => true, 'watch_files' => [ base_path('app'), base_path('routes'), base_path('config'), // 按需添加需要监听的目录 ], ];
注意:生产环境不建议开启自动重载,避免频繁重载影响服务稳定性。
确认容器运行状态
执行docker-compose ps,检查目标容器状态是否为Up。如果是Exited,执行docker-compose logs <容器名称>查看启动报错信息。检查端口映射配置
确保docker-compose.yml中正确映射了Swoole服务端口(默认9501),示例:
services: laravel-swoole: # 其他配置... ports: - "9501:9501" # 宿主机端口:容器内端口
如果宿主机9501端口被占用,可修改为9502:9501,访问时使用http://localhost:9502。
验证容器内服务监听地址
进入容器:docker-compose exec laravel-swoole bash,执行netstat -tulpn(若未安装,先执行apt-get install net-tools),确认Swoole服务监听的是0.0.0.0:9501而非127.0.0.1(后者仅容器内部可访问)。检查网络与防火墙
如果是远程服务器,确认宿主机防火墙/云服务商安全组已开放映射的端口(如9501)。修正应用内服务连接配置
若应用连接数据库、Redis等其他服务,配置文件中的主机名需使用Docker服务名而非localhost。例如数据库配置:
DB_HOST=mysql # 对应docker-compose.yml中的mysql服务名称 DB_PORT=3306
内容的提问来源于stack exchange,提问作者milica98

