ARG N8N_VERSION=2.1.1 # ------------------------------------------------ # 1) busybox-static (sh, sed, mkdir, etc.) # ------------------------------------------------ FROM alpine:3.23 AS busybox-builder RUN apk add --no-cache busybox-static # ------------------------------------------------ # 2) jq + su-exec # ------------------------------------------------ FROM alpine:3.23 AS tools-builder RUN apk add --no-cache jq su-exec # ------------------------------------------------ # 3) claude-code # ------------------------------------------------ FROM node:20-alpine AS node-builder RUN npm install -g @anthropic-ai/claude-code # ------------------------------------------------ # 4) Final image (n8n distroless) # ------------------------------------------------ FROM docker.n8n.io/n8nio/n8n:${N8N_VERSION} USER root # ---- busybox (static) ---- COPY --from=busybox-builder /bin/busybox /bin/busybox RUN ["/bin/busybox", "--install", "/bin"] # ---- jq + su-exec ---- COPY --from=tools-builder /usr/bin/jq /usr/bin/jq COPY --from=tools-builder /sbin/su-exec /sbin/su-exec # ---- claude-code ---- COPY --from=node-builder /usr/local/lib/node_modules /usr/local/lib/node_modules COPY --from=node-builder /usr/local/bin/claude /usr/local/bin/claude ENV PATH="/usr/local/bin:/bin:/sbin:${PATH}" # ---- entrypoint ---- WORKDIR /data COPY docker-entrypoint.sh /tmp/docker-entrypoint.sh RUN chmod +x /tmp/docker-entrypoint.sh ENTRYPOINT ["/bin/sh", "/tmp/docker-entrypoint.sh"] EXPOSE 5678