Fix Dockerfile healthcheck

- Add curl explicitly (wget in Alpine has IPv6/connection quirks)
- Use 127.0.0.1 instead of localhost to avoid IPv6 races
- Extend start-period to 60s (Node cold-start can take 30-60s)
- More retries (8 instead of 3) for resilience during first deploy
This commit is contained in:
Slim Uiltjies App 2026-08-08 09:31:01 +02:00
parent 1939bf2ef4
commit c4086f9e23

View file

@ -1,5 +1,8 @@
FROM node:20-alpine
# Install curl explicitly for the healthcheck (wget in alpine has had IPv6/connection-resolved quirks)
RUN apk add --no-cache curl
# Create app directory and data directory for the persistent volume
WORKDIR /app
RUN mkdir -p /data
@ -19,8 +22,10 @@ ENV PORT=3000 \
EXPOSE 3000
# Healthcheck for Coolify / orchestrators
HEALTHCHECK --interval=30s --timeout=3s --start-period=10s --retries=3 \
CMD wget -q --spider http://localhost:3000/api/health || exit 1
# Use 127.0.0.1 (IPv4 explicit) to avoid IPv6 connection-refused races.
# Generous start-period because Node + Alpine cold-start can take ~30-60s on first deploy.
HEALTHCHECK --interval=20s --timeout=5s --start-period=60s --retries=8 \
CMD curl -fsS http://127.0.0.1:3000/api/health || exit 1
# Run as non-root for safety
RUN addgroup -S app && adduser -S app -G app && chown -R app:app /app /data