# --- Build ------------------------------------------------------------------ FROM node:22-alpine AS build WORKDIR /app COPY package.json package-lock.json ./ RUN npm ci COPY tsconfig.json vite.config.ts index.html ./ COPY src ./src COPY public ./public RUN npm run build # --- Laufzeit --------------------------------------------------------------- FROM nginx:1.27-alpine COPY nginx.conf /etc/nginx/conf.d/default.conf COPY --from=build /app/dist /usr/share/nginx/html EXPOSE 80 # 127.0.0.1 statt localhost: busybox-wget loest localhost zuerst nach ::1 auf. # Ein dauerhaft fehlschlagender Healthcheck ist hier nicht harmlos - Traefik # nimmt Container, die nicht "healthy" sind, gar nicht in die Routing-Tabelle auf. HEALTHCHECK --interval=30s --timeout=3s --start-period=10s --retries=3 \ CMD wget -qO- http://127.0.0.1/ >/dev/null 2>&1 || exit 1