M1 Mac运行Docksal出现Xdebug报错及数据库容器故障
问题原因
两个问题相互独立,根因分别如下:
- Xdebug刷屏报错属于非阻断性提示:Xdebug 3默认开启Step Debug调试模式,但本地没有运行监听9000端口的IDE调试服务(比如PhpStorm、VS Code的PHP调试插件没启动监听),因此会反复输出连接失败日志,这个问题本身不会导致站点功能异常,仅会污染命令行输出。
- 站点无法访问、数据库连接失败是M1芯片(ARM64架构)的镜像兼容问题:你使用的Docksal 1.16版本默认拉取的MySQL 5.7.25镜像仅有x86_64架构构建,没有原生ARM64版本,Docker Desktop通过Rosetta 2转译运行这个旧版本镜像时,会触发镜像内置Go运行时的线程创建panic,就是你日志中看到的
runtime.newosproc相关崩溃栈,db容器启动后会立刻异常退出,才会导致Drush连接数据库失败。docker ps显示容器健康是状态刷新延迟导致的假象,实际db容器已经处于反复崩溃重启的状态。
修复步骤
按顺序操作即可:
- 处理Xdebug日志刷屏问题
在项目根目录执行以下命令关闭非必要的Xdebug调试模式,不需要调试时保持关闭即可从根源解决报错:
后续需要用Xdebug调试时,再把值改成fin config set XDEBUG_MODE=off fin project restart clidebug,develop重启cli容器即可。 - 修复数据库容器崩溃问题,二选一即可:
- 方案一(推荐):升级Docksal到适配M1芯片的版本
Docksal从1.18版本开始正式支持Apple Silicon芯片,默认拉取ARM64原生构建的数据库镜像,不存在转译崩溃问题。
先备份出问题项目的数据库:
执行全局Docksal升级:fin db dump ~/site_db_backup.sql
升级完成后进入出问题的项目目录,重置数据库服务:fin update
重置完成后把之前备份的数据库导回:fin project reset dbfin db import ~/site_db_backup.sql - 方案二(不升级Docksal临时修复):手动替换数据库镜像为ARM兼容版本
同样先备份数据库,然后在项目根目录执行命令替换数据库镜像为支持ARM64的MariaDB 10.6版本:
如果启动后还是报错,再执行fin config set DB_IMAGE=docksal/mariadb:10.6 fin project stop fin project startfin project reset db重置数据库后导入备份即可。
- 方案一(推荐):升级Docksal到适配M1芯片的版本
- 修复验证
执行fin ps确认db容器状态为正常Up,执行fin drush sqlc可以正常进入数据库交互命令行,站点访问无报错、命令行无Xdebug连接刷屏提示即为修复完成。
内容的提问来源于stack exchange,提问作者JAyenGreen
相关产品推荐
相关产品推荐

