Problem:
When you try to run your puppetteer application, e.g. under docker, you see this error message:
Solution:
Note: Unless you are running in a Docker or similar container, first consider running the application as non-root-user!
You have to pass the --no-sandbox
option to puppeteer.launch()
:
const browser = await puppeteer.launch({ headless: true, args: ['--no-sandbox'] });
We recommend to use this slightly more complex solution to pass it only if the process is being run as root
:
/** * Return true if the current process is run by the root user * https://techoverflow.net/2019/11/07/how-to-check-if-nodejs-is-run-by-root/ */ function isCurrentUserRoot() { return process.getuid() == 0; // UID 0 is always root } const browser = await puppeteer.launch({ headless: true, args: isCurrentUserRoot() ? ['--no-sandbox'] : undefined });
This ensures Chromium is run in the most secure mode possible with the current user.