How to fix Puppetteer 'Running as root without --no-sandbox is not supported'
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.