php:7.4-alpine で Laravel Dusk を実行する
php artisan dusk:install
でインストールされる chromedriver を alpine で実行するとエラーになってしまいました。
Failed to connect to localhost port 9515: Connection refused
や
unknown error: cannot find Chrome binary
等のエラーです。
試行錯誤の末、次の手順が最小限な解決方法でした。
Dockerfile で次のパッケージをインストール。 ttf-freefont
は無くても動きますが、日本語が文字化けします。
RUN apk add chromium chromium-chromedriver ttf-freefont
使用する chromedriver を差し替えて docker exec で実行。
% docker exec laravel ln -sf /usr/bin/chromedriver /path/to/vendor/laravel/dusk/bin/chromedriver-linux && php artisan dusk
PHPUnit 8.5.2 by Sebastian Bergmann and contributors.
. 1 / 1 (100%)
Time: 3.86 seconds, Memory: 16.00 MB
OK (1 test, 1 assertion)
ただし、コンテナ内で実行すると別のエラーがでます。
# ln -sf /usr/bin/chromedriver /path/to/vendor/laravel/dusk/bin/chromedriver-linux && php artisan dusk
Facebook\WebDriver\Exception\UnknownServerException: unknown error: Chrome failed to start: exited abnormally
この場合は DuskTestCase
に --no-sandbox
を追加してあげれば解決します。
$options = (new ChromeOptions)->addArguments([
'--disable-gpu',
'--headless',
'--window-size=1920,1080',
'--no-sandbox', // 追加
]);
尚 Dockerfile での
RUN sed -i 's@Exec=chromium-browser %U@Exec=chromium-browser %U --no-sandbox@g' /usr/share/applications/chromium.desktop
だと解決できませんでした。
Read other posts