← กลับหน้าแรก
บันทึก29 Oct 20264 นาที

Postmortem: 502 เป็นครั้งคราว เพราะ Next.js เขียน cache ไม่ได้

เจอ EACCES 530 ครั้งใน 24 ชม. ต้นเหตุคือ Dockerfile copy .next เป็น root แล้วสลับ user — แก้ด้วย --chown สองบรรทัด

เว็บเล็ก ๆ ที่รันบนมินิพีซีมีอาการ 502 เป็นครั้งคราว วันละครั้งบ้าง สองวันครั้งบ้าง ดู log แล้วเจอ:

EACCES: permission denied, open '/app/.next/server/app/index.rsc'
Failed to update prerender cache for /index

สาเหตุ

Dockerfile ทำ COPY --from=build /app/.next ./.next เป็นของ root แล้วค่อย USER node — พอถึงจังหวะ revalidate ของ ISR เขียนไม่ได้ ก็ตอบ 502

วิธีแก้

COPY --chown=node:node --from=build /app/.next ./.next
COPY --chown=node:node --from=build /app/public ./public
RUN mkdir -p /app/.next/cache && chown -R node:node /app/.next
USER node

หลัง rebuild: EACCES = 0 และไม่มี 502 อีก บทเรียนคือ error ที่ดูเหมือน network มักมาจากสิทธิ์ไฟล์ใน container