Issue: Laravel Dusk + ChromeDriver “session not created: probably user data directory is already in use"
Hi everyone,
I’ve been struggling with an issue in Laravel 12 + Dusk 8 + PHP 8.4 on an EC2 Linux server. After many attempted fixes, I still get this recurring error:
"session not created: probably user data directory is already in use, please specify a unique value for --user-data-dir argument, or don't use --user-data-dir"
What I’ve Tried So Far:
- Commented out --user-data-dir logic (useCustomDir)
- Adjusted retry duration
- Cleaned tmp/prerender directory before runs
- chown + chmod on tmp/prerender to ensure correct permissions
- Verified Chrome + Chromedriver versions match
- Tried both --headless and --headless=new (Chrome 109+ syntax)
- Confirmed a simple php artisan dusk test runs fine on both EC2 and local
- Ensured unique ports per request
- Ensured unique data directories per request Added flags to reduce memory issues: --disable-dev-shm-usage --no-sandbox --ozone-platform=headless --use-gl=swiftshader
- Added logging with --log-level=0
Code:
protected function driver(int $port): RemoteWebDriver
{
$args = [
'--disable-gpu',
'--headless=new',
'--window-size=1920,1080',
'--no-sandbox',
'--disable-extensions',
'--disable-crash-reporter',
'--log-level=0', // Critical / Fatal log level
'--user-agent=' . Str::replaceFirst(' Chrome', ' HeadlessChrome', UserAgent::chrome()),
'--use-gl=swiftshader',
'--ozone-platform=headless',
'--disable-dev-shm-usage',
'--hide-scrollbars',
'--mute-audio',
];
if ($this->useCustomDir) {
$customDir = storage_path("tmp/prerender/{$port}");
if (File::isDirectory($customDir)) {
File::deleteDirectory($customDir);
}
$args[] = "--user-data-dir={$customDir}";
}
$options = (new ChromeOptions)->addArguments($args);
$capabilities = DesiredCapabilities::chrome()->setCapability(ChromeOptions::CAPABILITY, $options);
return retry(5, function () use ($capabilities, $port) {
return RemoteWebDriver::create(sprintf($this->seleniumServerUrl, $port), $capabilities);
}, $this->sleepConnect);
}
Error Log:
session not created: probably user data directory is already in use,
please specify a unique value for --user-data-dir argument,
or don't use --user-data-dir
{"exception":"[object] (Facebook\\WebDriver\\Exception\\SessionNotCreatedException(code: 0):
session not created: probably user data directory is already in use
at /vendor/php-webdriver/webdriver/lib/Exception/WebDriverException.php:130)
❔ Question
Even after ensuring unique ports and data directories, ChromeDriver still throws this error.
Has anyone else run into persistent --user-data-dir conflicts despite unique paths?
Is there a recommended pattern for handling ephemeral Chrome sessions in Laravel Dusk on a server (EC2)?
Any insights or working examples would be hugely appreciated 🙏
Please or to participate in this conversation.