Update: Das Store-Problem ist behoben, aber ein neues ist an seine Stelle getreten…
Details unten (Writeup zusammen mit meinem KI-Assistent verfasst, alles auf meiner eigenen Instanz verifiziert):
#36424 erhöht PNPM_VERSION in docker/images/runners/Dockerfile von 10.32.1 auf 11.22.0, sodass node_modules des Images und das pnpm, das du bekommst, beide auf v11 laufen — kein v10/v11-Mismatch mehr. Corepack ist auch weg: Node bündelt es nicht mehr und das Runtime-Image hat kein npm, daher wird pnpm jetzt direkt als Paket kopiert:
COPY --from=node-alpine /usr/local/lib/node_modules/pnpm /usr/local/lib/node_modules/pnpm
RUN ln -s ../lib/node_modules/pnpm/bin/pnpm.cjs /usr/local/bin/pnpm
Das Erweitern des Images ist aber immer noch kaputt, nur anders — das Symlink-Ziel hat kein Execute-Bit:
$ docker run --rm --entrypoint sh n8nio/runners:beta -c 'ls -lL /usr/local/bin/pnpm'
-rw-r--r-- 1 root root 105 Aug 25 13:35 /usr/local/bin/pnpm
(Image-Digest sha256:b6b5f79826a6d41422338e6a3b0b0d56750835dac844d8df630153ddf348dc38)
Also schlägt jeder pnpm-Aufruf in einem abgeleiteten Image fehl:
#13 [stage-1 7/8] RUN cd /opt/runners/task-runner-javascript && pnpm add moment uuid
#13 0.144 /bin/sh: pnpm: Permission denied
#13 ERROR: process "/bin/sh -c cd /opt/runners/task-runner-javascript && pnpm add moment uuid" did not complete successfully: exit code: 126
Exit 126 bedeutet gefunden, aber nicht ausführbar. USER root hilft hier nicht — root umgeht Lese- und Schreibberechtigungsprüfungen, aber nicht Execute: Eine Datei ohne gesetzte Execute-Bits kann von niemandem ausgeführt werden.
Erwähnenswert ist, dass der fehlgeschlagene Befehl wörtlich aus Adding extra dependencies in der Dokumentation kopiert ist, daher wird jeder, der diese Seite auf beta befolgt, darauf stoßen.
Workaround — chmod das Ziel vor der Verwendung von pnpm:
RUN chmod +x /usr/local/lib/node_modules/pnpm/bin/pnpm.cjs && \
cd /opt/runners/task-runner-javascript && \
pnpm add \
moment \
uuid
Oder überspringe das Execute-Bit komplett und nutze node:
RUN cd /opt/runners/task-runner-javascript && \
node /usr/local/lib/node_modules/pnpm/bin/pnpm.cjs add moment uuid
Die Lösung auf deiner Seite ist vermutlich COPY --chmod=755 auf dieser Ebene oder ein chmod +x nach ln -s.