diff --git a/hass-n8n/Dockerfile b/hass-n8n/Dockerfile index c34cb01..eba1edf 100644 --- a/hass-n8n/Dockerfile +++ b/hass-n8n/Dockerfile @@ -1,29 +1,48 @@ ARG N8N_VERSION=2.1.1 -# ---- builder stage ---- -FROM node:20-alpine AS builder +# ------------------------------------------------ +# 1) busybox-static (sh, sed, mkdir, etc.) +# ------------------------------------------------ +FROM alpine:3.23 AS busybox-builder +RUN apk add --no-cache busybox-static -RUN apk add --no-cache jq bash +# ------------------------------------------------ +# 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 -# ---- final stage ---- +# ------------------------------------------------ +# 4) Final image (n8n distroless) +# ------------------------------------------------ FROM docker.n8n.io/n8nio/n8n:${N8N_VERSION} USER root -# jq + bash -COPY --from=builder /usr/bin/jq /usr/bin/jq -COPY --from=builder /bin/bash /bin/bash +# ---- busybox (static) ---- +COPY --from=busybox-builder /bin/busybox /bin/busybox +RUN ["/bin/busybox", "--install", "/bin"] -# global npm packages -COPY --from=builder /usr/local/lib/node_modules /usr/local/lib/node_modules -COPY --from=builder /usr/local/bin/claude /usr/local/bin/claude +# ---- jq + su-exec ---- +COPY --from=tools-builder /usr/bin/jq /usr/bin/jq +COPY --from=tools-builder /sbin/su-exec /sbin/su-exec -# make sure PATH sees /usr/local/bin -ENV PATH="/usr/local/bin:${PATH}" +# ---- 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/bash", "/tmp/docker-entrypoint.sh"] +ENTRYPOINT ["/bin/sh", "/tmp/docker-entrypoint.sh"] EXPOSE 5678 \ No newline at end of file