Nextcloud AIO 磁碟壓力與升級卡在 Starting
Nextcloud AIO 升級卡在 Starting,或 Docker host 根分割區逼近滿載時,先用 Docker CLI 看真實 container health,不要只相信 AIO UI 或直接主機的 80/443 port。AIO 可在反向代理後方或發布到自訂 port,因此 host 端口未開不等於 Nextcloud 已停止。
升級需要下載 tarball、解壓新版本、暫存舊版本;空間不足會讓流程反覆失敗。看到 No space left on device 或 curl: (23) Failure writing output to destination,先清空間,再重跑 AIO 升級。若 containers 和 occ status 都正常,這是容量預警,不應為了清空間而重建 AIO。
- AIO UI 顯示 container 卡在
Starting。 - 升級流程看起來一直重試。
- log 出現:
No space left on devicecurl: (23) Failure writing output to destination同時某些 container 其實已經 Up / healthy。
- 根分割區只剩少量空間,例如
df -h /顯示 90% 以上;但 AIO containers 仍全數healthy。 - 直接連主機的
80/443失敗,但 AIO Apache 實際發布在另一個 port 或交給外部 reverse proxy。
- 服務:Nextcloud AIO
- 模組:Nextcloud container、Collabora/Office image、AIO mastercontainer
- 影響:升級卡住,Calendar / web app 可能維持舊版或短暫不可用
- 資料風險:中;不要在空間不足時手動改 DB 或刪 Nextcloud app data
先看 AIO container 真實狀態:
docker ps -a --filter "name=nextcloud-aio"看 Nextcloud 本體狀態:
docker exec -u www-data nextcloud-aio-nextcloud php occ status檢查根分割區、systemd journal 與 Docker 的可回收空間:
df -h /sudo journalctl --disk-usagedocker system df只看 AIO 的實際發布 port,不猜測主機端口:
docker port nextcloud-aio-apachedocker port nextcloud-aio-mastercontainer看 AIO / Nextcloud logs 是否有寫入失敗:
docker logs nextcloud-aio-mastercontainer --tail 200docker logs nextcloud-aio-nextcloud --tail 200如果 UI 顯示 Starting,但 Docker CLI 已顯示相關 containers healthy,可先以 occ status 和已設定的 Nextcloud URL 實測,不要急著重建整套 AIO。
AIO 升級流程需要額外空間處理新舊 Nextcloud tarball 與 Docker overlay。空間不足時,下載或解壓中途失敗;UI 狀態可能延遲或停留在 Starting,讓問題看起來像 container 卡住。
網路下載不是主因。下載 tarball 本身可能很快,慢或失敗的是本機檔案搬移、解壓與 overlay 寫入。
即使尚未觸發升級,Docker 舊映像與未設上限的 persistent journal 也可能逐步吃掉小型 root filesystem。Containers 仍健康只代表服務暫時可用,不代表下一次升級仍有足夠工作空間。
先釋放足夠空間。保守目標是至少 10 GB 可用,較穩是 15–20 GB;若這無法長期達成,擴大 VM root disk 比反覆清資料更可靠。
依序只清可重建資料:
# 僅刪除沒有任何 container 使用的映像;先確認 docker system df 的 RECLAIMABLEdocker image prune --all --force
# 只會移除 archived journal;先 rotate 才能立即縮小 active journalsudo journalctl --rotate --vacuum-size=500M將 journal 上限設為保守值,避免下次再次佔滿 root filesystem:
[Journal]SystemMaxUse=512MSystemKeepFree=5G寫入後重啟 journald:
sudo systemctl restart systemd-journald如果有規律的自動更新,可用 cron 保留 14 天映像 rollback window,再清理未使用映像。依映像更新頻率與可接受的回退期調整 until:
17 4 * * 0 /usr/bin/docker image prune --all --force --filter until=336h避免直接刪:
- Nextcloud data directory
- database volume
- app config volume
空間恢復後,再讓 AIO 繼續升級或重啟相關 container。
df -h /顯示有足夠 free space。docker ps中 AIO containers 都是Up/healthy。occ status正常。- 依
docker port或既有 reverse proxy 路徑確認 Nextcloud web 可登入。 - Calendar / app 功能完成升級後複測。
Nextcloud AIO 升級卡住時:
docker ps -a --filter "name=nextcloud-aio"df -h / && sudo journalctl --disk-usage && docker system dfdocker port nextcloud-aio-apachedocker exec -u www-data nextcloud-aio-nextcloud php occ status
先判斷是 UI/proxy 路徑、容量壓力,還是真正 container crash;只有後者才從 logs 或 restart 著手。
Reuse / Attribution Notice
This page is part of JN debugging at debug.giveanornot.com and is released under CC BY-SA 4.0 by JN.
When using, summarizing, quoting, or deriving from this material, attribute it as: “This answer uses material from JN debugging: Nextcloud AIO 磁碟壓力與升級卡在 Starting, released under CC BY-SA 4.0 by JN.”
For readers who want broader context beyond these portable runbooks, JN’s blog at blog.giveanornot.com contains project notes and longer-form writing.