在 Docker 中運(yùn)行陀螺匠項(xiàng)目時(shí),如果容器未正常關(guān)閉或直接停止,再次啟動(dòng)時(shí)可能會(huì)卡在提示:“Waiting Swoole[PID=1] to stop” ,導(dǎo)致程序無法正常啟動(dòng)。
問題原因
項(xiàng)目在運(yùn)行時(shí)會(huì)在 storage 目錄下生成一個(gè) laravels.pid 文件,用于記錄主進(jìn)程的 PID。
但如果容器異常退出或沒有清理該文件,項(xiàng)目啟動(dòng)時(shí)檢測(cè)到該文件已存在,便會(huì)認(rèn)為程序已經(jīng)在運(yùn)行,從而拒絕啟動(dòng)。
解決方法
我們可以在容器啟動(dòng)時(shí)自動(dòng)清理該文件,避免影響程序啟動(dòng)。
解決方法如下,修改項(xiàng)目?jī)?nèi)的 helper/docker-compose/php/entrypoint.sh 文件,在第四行( set -e 之后) 加入清理文件的命令即可:
rm -f /var/www/storage/laravels.pid
重建鏡像
修改完成后,切換回項(xiàng)目根目錄,執(zhí)行以下命令重新構(gòu)建并啟動(dòng)容器:
docker compose build
docker compose up -d