Behebung von Puppetteer 'Running as root without --no-sandbox is not supported'

English Deutsch

Problem:

Wenn du versuchst, deine Puppetteer-Anwendung auszuführen, z.B. unter Docker, siehst du diese Fehlermeldung:

Lösung

Hinweis: Außer du führst sie in einem Docker- oder ähnlichen Container aus, erwäge zuerst, die Anwendung als Nicht-root-Benutzer auszuführen!

Du musst die --no-sandbox-Option an puppeteer.launch() übergeben:

puppeteer_run_root_example.js
const browser = await puppeteer.launch({
    headless: true,
    args: ['--no-sandbox']
});

Wir empfehlen, diese etwas komplexere Lösung zu verwenden, um sie nur zu übergeben, wenn der Prozess als root ausgeführt wird:

puppeteer_launch_options.js
/**
 * Gibt true zurück, wenn der aktuelle Prozess vom root-Benutzer ausgeführt wird
 * https://techoverflow.net/2019/11/07/how-to-check-if-nodejs-is-run-by-root/
 */
function isCurrentUserRoot() {
   return process.getuid() == 0; // UID 0 ist immer root
}

const browser = await puppeteer.launch({
    headless: true,
    args: isCurrentUserRoot() ? ['--no-sandbox'] : undefined
});

Dies stellt sicher, dass Chromium im sicherstmöglichen Modus mit dem aktuellen Benutzer ausgeführt wird.


Check out similar posts by category: Javascript, NodeJS, Puppeteer