# ========================================== # STAGE 1: Der Builder (Hier wird kompiliert) # ========================================== FROM nodered/node-red:latest AS builder USER root # Compiler installieren, die Scout bemängelt RUN apk add --no-cache python3 py3-pip python3-dev gcc g++ musl-dev libffi-dev # Python-Pakete in einen separaten Ordner installieren RUN pip3 install --no-cache-dir --break-system-packages --target=/opt/python-packages \ pandas \ numpy \ ldap3 # ================================================ # STAGE 2: Das finale, saubere Image # gcc, ... wird nicht in das finale Image kopiert. # ================================================ FROM nodered/node-red:latest USER root # NUR die Laufzeitumgebung installieren (KEIN gcc, KEIN g++, KEIN musl-dev!) RUN apk add --no-cache python3 py3-pip tzdata # Die fertig kompilierten Pakete aus Stage 1 an einen stabilen Ort kopieren COPY --from=builder /opt/python-packages /opt/python-packages # Den neuen Paket-Ordner zum PYTHONPATH hinzufügen ENV PYTHONPATH="/opt/python-packages:${PYTHONPATH}" # Zurück zum sicheren Standard-User von Node-RED USER node-red # Node-RED Module installieren RUN npm install node-red-contrib-moment node-red-contrib-cron-plus # Wechsel zu root, um das Entrypoint-Skript zu kopieren und die Rechte zu setzen USER root # Kopiere unser neues Entrypoint-Skript COPY entrypoint.sh /usr/local/bin/entrypoint.sh RUN chmod +x /usr/local/bin/entrypoint.sh # Setze unser Skript als den neuen Entrypoint ENTRYPOINT ["/usr/local/bin/entrypoint.sh"] # Der ursprüngliche CMD des Node-RED-Images wird automatisch beibehalten und # an unser Entrypoint-Skript als "$@" übergeben.