在 Docker 中运行陀螺匠项目时,如果容器未正常关闭或直接停止,再次启动时可能会卡在提示:“Waiting Swoole[PID=1] to stop” ,导致程序无法正常启动。
问题原因
项目在运行时会在 storage 目录下生成一个 laravels.pid 文件,用于记录主进程的 PID。
但如果容器异常退出或没有清理该文件,项目启动时检测到该文件已存在,便会认为程序已经在运行,从而拒绝启动。
解决方法
我们可以在容器启动时自动清理该文件,避免影响程序启动。
解决方法如下,修改项目内的 helper/docker-compose/php/entrypoint.sh 文件,在第四行( set -e 之后) 加入清理文件的命令即可:
rm -f /var/www/storage/laravels.pid
重建镜像
修改完成后,切换回项目根目录,执行以下命令重新构建并启动容器:
docker compose build
docker compose up -d