iTechGuides is reader-supported. When you buy through links on our site, we may earn an affiliate commission. As an Amazon Associate I earn from qualifying purchases. Learn more
Fix “Chrome not found” by installing or locating the browser inside the Sail environment that runs Puppeteer. Installing Chrome on your host machine does not make it available in the Linux container. The usual choices are to let Puppeteer download its compatible Chrome for Testing build, point Puppeteer to Chrome or Chromium installed in the container, or move browser execution to a Selenium service.
What “Chrome not found” means in Laravel Sail
Puppeteer needs a browser executable it can launch. In Sail, that executable and its dependencies must exist in the relevant container and be accessible to the Node process at runtime. The error commonly means one of four things:
- Puppeteer’s browser download was skipped, often because the package manager blocked install scripts.
- The browser was downloaded into a cache the runtime user or container cannot see.
- Puppeteer is configured with a path that does not exist inside the container.
- The executable exists, but permissions or missing Linux libraries prevent it from launching.
Puppeteer’s official installation guide specifically warns that blocking install scripts can skip the automatic browser download and produce “Could not find Chrome (ver. …).” Puppeteer installation guide.
Free tools Windows power users keep installed
One-click scans. No signup required.
Choose where Chrome should live
| Approach | Browser location | Good fit | Check first |
|---|---|---|---|
| Puppeteer-managed Chrome | Puppeteer’s cache in the Sail image or runtime filesystem | A Node/Puppeteer service where you want Puppeteer to manage a compatible browser | Install scripts ran; the runtime user can access the browser cache |
| System Chrome or Chromium | Installed in the application container | Teams managing browser packages as part of the OS image | Configured executable path is correct and required libraries are installed |
| Selenium service | A separate Selenium Chrome or Chromium container | Laravel Dusk or tests that benefit from a separate browser container | Service hostname, startup order, network access, and shared memory |
These approaches differ in who installs and updates the browser, where its cache lives, and how the application connects to it. Pick one deliberately rather than combining partial setup from several approaches.
#1 Best Overall
- 14" diagonal, 1366x768 resolution, HD BrightView LED, Glossy NON-TOUCH Display
Option 1: Install Puppeteer-managed Chrome in Sail
This is usually the most direct repair when Puppeteer should manage a browser version compatible with its installed package. Run installation in the container image or container that will run the script—not just on your laptop.
- Add Puppeteer to the Node project:
npm install puppeteer - Install its browser in the Sail environment:
npx puppeteer browsers install - Run the script as the intended runtime user and check that the browser cache is visible to that user.
If dependencies are installed during a Docker build, make the browser installation part of that build or deployment process so a rebuilt container does not lose it. Puppeteer’s Docker guide describes an image that includes Chrome for Testing, required dependencies, and a pre-installed Puppeteer version; that is a distinct image-based setup, not a guarantee that every Sail image contains Chrome. Puppeteer Docker guide.
When package-manager scripts are blocked
Some package-manager configurations block lifecycle scripts, preventing Puppeteer’s automatic browser download. Allow Puppeteer’s install script according to the package manager and project policy, or keep the explicit npx puppeteer browsers install step in the container build. Do not assume that installing the npm package alone installed Chrome.
The Tool Desk
Outbyte PC Repair FREERepair Windows errors before they cause bigger problemsFix Now →Outbyte Driver Updater FREEFix the driver behind crashes, sound loss and screen glitchesFind Drivers →Keep cache and runtime users aligned
A download made by one user may land in a cache unavailable to another. Likewise, a download made on the host is not automatically present in Sail. Install and run Puppeteer in the same filesystem and user context, or deliberately configure and persist a shared browser cache. Puppeteer’s configuration and troubleshooting guides cover browser cache location and configuration. Configuration · Troubleshooting.
Rank #2
- 1.1 GHz (boost up to 2.4GHz) Intel Celeron N5030 Quad-Core
- 4GB DDR4 System Memory; 128GB Solid State Drive
- 11.6" HD (1366 x 768) Multi-Touch Display
- Combo headphone/microphone jack - Noble Wedge Lock slot - HDMI; 2 USB 3.1 Gen 1
- Windows 11 Pro
Option 2: Use Chrome or Chromium installed in the application container
If the image installs a system browser, tell Puppeteer its actual in-container executable path. First enter the Sail container that runs Node and check the available binary:
which chromium
which chromium-browser
which google-chrome-stable
Use the command that returns a path. For example, if the container reports /usr/bin/chromium, configure Puppeteer like this:
Outdated Drivers Are Slowing You Down
One free scan finds every outdated or missing driver and matches the right update for your exact hardware.Free scan · exact hardware matchWindows Errors? Fix Them Before They Spread
Repair common Windows errors and clear accumulated junk for a smoother, more stable PC - no reinstall needed.Free scan · no reinstallconst puppeteer = require('puppeteer');
async function main() {
const browser = await puppeteer.launch({
executablePath: process.env.PUPPETEER_EXECUTABLE_PATH || '/usr/bin/chromium',
headless: true,
});
Rank #3
- 256 GB SSD of storage.
- Multitasking is easy with 16GB of RAM
- Equipped with a blazing fast Core i5 2.00 GHz processor.
try {
const page = await browser.newPage();
await page.goto('https://example.com', { waitUntil: 'domcontentloaded' });
console.log(await page.title());
} finally {
await browser.close();
}
}
main().catch((error) => {
console.error(error);
process.exitCode = 1;
});
Replace the example executable path with the path found in your image. Puppeteer’s configuration documentation requires an explicit executablePath when using a separately managed browser; its API also supports PUPPETEER_EXECUTABLE_PATH. Puppeteer configuration API.
Quick wins for a faster PC:
Repair Windows errors before they cause bigger problemsFix Now →Fix the driver behind crashes, sound loss and screen glitchesFind Drivers →Do not mix host and container paths
A macOS path such as a location under /Applications, or a path from another host setup, will not resolve in the Linux container unless that exact path is present there. Verify the path from the same container and user that executes the script.
Rank #4
- EFFORTLESS EVERYDAY PERFORMANCE: Powered by Intel Celeron N4020 processor and Windows 11 Home system, delivering reliable, low-power efficiency for daily tasks like document editing, email, online classes, and web browsing
- 15.6-INCH FULL HD DISPLAY: Enjoy immersive visuals on the 15.6" FHD (1920x1080) anti-glare screen with micro-edge bezels. Delivers clear details and comfortable viewing for long study sessions, working on spreadsheets, and video playback
- RESPONSIVE MULTITASKING & STORAGE: Built with 4GB LPDDR4 RAM and 128GB eMMC storage for smooth daily essential use. Expand your storage by up to 1TB via the integrated TF card slot to easily store movies, photos, and working files
- ADVANCED CONNECTIVITY: Outfitted with 2x Full-Featured Type-C ports for data transfer, fast charging, and dual-monitor output, alongside 2x USB 3.2 Gen1 ports and a 3.5mm audio jack for complete peripheral compatibility
- LIGHTWEIGHT & SILENT OPERATION: Slim and portable for effortless travel or commuting. Features a 1MP HD webcam for remote meetings, 38Wh battery with 45W Type-C fast charging, and a fanless silent design for peaceful work environments.
Use skip-download only with a replacement browser
PUPPETEER_SKIP_DOWNLOAD disables Puppeteer’s browser download. Set it only when the image reliably installs another compatible browser and Puppeteer is configured with its valid path. Otherwise, the setting removes the browser Puppeteer would have downloaded without providing a replacement. Puppeteer configuration.
Option 3: Run Chrome as a separate Selenium service
A separate browser container can be useful for Laravel Dusk or workflows where the PHP/application container should not host Chrome. Laravel Sail’s documentation shows a Compose pattern using selenium/standalone-chrome, a /dev/shm mount, the Sail network, and a depends_on entry for the test service. It documents selenium/standalone-chromium for Apple Silicon. Laravel Sail: Laravel Dusk.
In this design, the test client connects to Selenium over the container network; it does not search for a local Chrome executable. Follow the Sail documentation’s Compose example and configure the client to use the Selenium service hostname and port. Keep the service name and startup dependency in compose.yaml. The browser must be ready to accept connections when tests begin; depends_on establishes startup ordering but should not be treated as proof that a service is healthy and ready.
Do these 3 things before closing this tab:
1Repair Windows errors before they cause bigger problems2Fix the driver behind crashes, sound loss and screen glitches3Clear out junk files and repair common Windows errorsVerify the container before changing more settings
- Enter the correct container. Check the environment where the Node process actually runs, which may differ from the PHP container.
- Check the configured executable. Inspect
puppeteer.executablePath()or run the relevantwhichcommand, then confirm that the returned file exists and is executable. - Check the download and cache. Confirm lifecycle scripts were not suppressed and the browser cache belongs to, or is readable by, the runtime user.
- Check shared libraries. Puppeteer lists Linux dependencies including
libnss3,libgbm1,libgtk-3-0,libasound2, font packages, and related X/GTK libraries. A missing dependency can prevent launch even when the browser file exists. Install the dependencies appropriate to the container’s distribution, using the current Puppeteer troubleshooting guidance. Puppeteer troubleshooting. - Check writable paths. Chrome needs writable profile and cache locations. In a restricted or read-only container, configure writable
XDG_CONFIG_HOME,XDG_CACHE_HOME, and a writable PuppeteeruserDataDir, such as a suitable directory under/tmp, or mount writable volumes. - Review the sandbox deliberately. Prefer a non-root runtime user and container permissions consistent with Puppeteer’s guidance. Do not add
--no-sandboxas a routine workaround; use it only when required by the container security model and after weighing the security implications. Puppeteer troubleshooting. - For Selenium, inspect shared memory and connectivity. Preserve the documented
/dev/shmmount and make sure the test client targets the correct service on the Sail network.
Common “Chrome not found Puppeteer Laravel Sail” failures
| Symptom | Likely cause | Fix |
|---|---|---|
Could not find Chrome (ver. ...) |
Puppeteer’s browser download did not run, or its cache is unavailable in the runtime container. | Run npx puppeteer browsers install in the container/build, then run as a user that can access that cache. |
executablePath points to a missing file |
The path belongs to the host or another image, or the system browser is not installed. | Run which chromium, which chromium-browser, or which google-chrome-stable inside the runtime container and configure the path it returns. |
| Browser file exists but launch fails | Missing Linux libraries, insufficient permissions, or unwritable profile/cache directories. | Install the distribution-appropriate dependencies, correct ownership or permissions, and point Chrome’s configuration/cache to writable locations. |
Failure started after setting PUPPETEER_SKIP_DOWNLOAD |
The download was disabled without installing a replacement browser. | Install Chrome/Chromium in the image and configure its real path, or remove the skip-download setting. |
| Failure occurs only in an Alpine-based image | Chrome does not support Alpine out of the box; Chromium, Puppeteer, and dependencies need careful matching. | Use a supported image or follow Puppeteer’s Alpine-specific troubleshooting guidance rather than assuming Debian package names or paths apply. Puppeteer troubleshooting. |
| Selenium client cannot reach Chrome | Wrong service hostname/port, service not ready, or missing Sail network/shared-memory setup. | Use the Compose service name from the Sail network, preserve the documented service dependency and /dev/shm mount, and ensure the browser service is accepting connections. |
Performance, reliability, and cost considerations
- Build reproducibility: Installing the browser during image build or deployment makes the runtime environment explicit. A browser downloaded interactively into a disposable container can disappear when that container is recreated.
- Version compatibility: Puppeteer-managed Chrome for Testing is intended to match Puppeteer; system browser packages are managed independently, so verify compatibility when either side changes.
- Image and dependency footprint: A browser and its Linux libraries add deployment dependencies. A separate Selenium service moves that footprint out of the application container but introduces network and readiness configuration.
- Cache and permissions: A shared or persisted cache can avoid repeated downloads, but only if its ownership and runtime path are consistent. Treat it as part of deployment configuration.
- Resource limits: Headless browsers still use memory, CPU, writable disk, and shared memory. Size and test the container under your real workload; no universal resource figure is established by the cited documentation.
- Security: Running Chrome as root or disabling its sandbox changes the security posture. Prefer a non-root user and follow the browser/container guidance for your deployment rather than hiding a permissions issue with broad flags.
- Cost: The documented repair paths use software and containers; the relevant operational cost is the compute, storage, and maintenance of the browser environment. No price or performance benchmark for these paths is established in the cited sources.
Or skip the browser setup
If your goal is simply to capture a webpage—not to run Puppeteer tests inside Sail—ScreenshotNeo provides a screenshot API. A GET request returns a PNG, JPEG, WebP, or PDF. For example, this cURL request captures a page as WebP:
Best Value
- WINDOWS 11 | STABLE PERFORMANCE: Powered by Intel Celeron N4020 processor and Windows 11 system, this laptop delivers stable performance for everyday computing tasks. It supports web browsing, online learning, document editing, email communication, and basic office work with optimized power efficiency, providing a practical and reliable experience for essential daily use for daily use.
- 15.6” FHD IPS DISPLAY: Features a 15.6-inch Full HD IPS display with narrow bezels, offering wider viewing angles and clearer image details compared to standard panels. The improved screen-to-body ratio enhances visual experience for study, reading, document work, and video playback, making it suitable for both productivity and entertainment use.
- 4GB DDR4 + 128GB eMMC STORAGE: Equipped with 4GB DDR4 memory and 128GB eMMC storage for everyday basics such as browsing, documents, email, and online learning platforms. The built-in TF card slot supports storage expansion up to 1TB, giving you more flexibility for files, photos, videos, and daily documents. TF card not included.
- CONNECTIVITY & PORTS: Includes 1× TF card slot, 2× USB 3.2 Gen1 ports, and 2× full-featured Type-C ports (USB 3.2 Gen1). The Type-C ports support data transfer, charging, and video output, enabling flexible connection with external devices such as monitors, storage, and peripherals for daily work and study use.
- LIGHTWEIGHT DESIGN | ONLINE COMMUNICATION: Designed with a slim, portable profile, this laptop is easy to carry for school, commuting, and travel. A built-in 1MP front camera supports online classes, video meetings, remote communication, and everyday conferencing. The 3300mAh battery works with the low-power system design to support practical daily use, while thermal optimization helps maintain quieter operation during extended tasks.
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
See the ScreenshotNeo API documentation for request options. ScreenshotNeo removes cookie/consent banners, newsletter popups, and chat widgets before capture; bot checks, blank pages, and failed loads are not billed. Its MCP server offers screenshot tools for AI agents. The Free plan includes 1,000 screenshots per month with no card; paid plans start at $5 for 3,000. This is an alternative for screenshot capture, not a fix for a Puppeteer browser needed by your Sail tests.
Sign up for ScreenshotNeo’s free plan to get 1,000 screenshots a month with no card.
Frequently Asked Questions
Does installing Chrome on my computer install it in Laravel Sail?
No. Sail runs containers with their own filesystem; install or expose the browser inside the container that runs Puppeteer.
Should I use `–no-sandbox` to fix Chrome not found?
No. It does not install or locate Chrome. Address the executable, dependencies, and permissions first; disable the sandbox only when required by a considered container security setup.
Can I use Puppeteer with a remote Selenium browser?
Yes, when configured as a remote-browser workflow: connect the client to the Selenium service rather than calling `puppeteer.launch()` to find a local executable.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

