nyarn.tech

にゃーん

DockerでLighthouseを動かすために必要なもの

tl;dr

--chrome-flags="--headless --no-sandbox --disable-gpu" をつけて実行する

解説

DockerでLighthouseを動かそうとすると、いくつかハマるポイントがあります。
だいたいはLighthouseに起因する問題ではなく、Docker上でChromeを動かすことの問題だったりします。

よくあるエラー

$ lighthouse  http://example.com
  ChromeLauncher Waiting for browser. +0ms
  ChromeLauncher Waiting for browser... +2ms
  ChromeLauncher Waiting for browser..... +509ms
  ChromeLauncher Waiting for browser....... +502ms
  ChromeLauncher Waiting for browser......... +502ms
  (しばらく続く)
  ChromeLauncher:error connect ECONNREFUSED 127.0.0.1:33011 +2ms
  ChromeLauncher:error Logging contents of /tmp/lighthouse.ZXTMeEO/chrome-err.log +0ms
  ChromeLauncher:error [1162:1162:0807/071741.407160:FATAL:zygote_host_impl_linux.cc(127)] No usable sandbox! Update your kernel or see https://chromium.googlesource.com/chromium/src/+/master/docs/linux_suid_sandbox_development.md for more information on developing with the SUID sandbox. If you want to live dangerously and need an immediate workaround, you can try using --no-sandbox.
  ChromeLauncher:error  +0ms
Unable to connect to Chrome

エラーをみると、 使えるsandboxがないと出ています。
puppeteerのissueをみても、 --no-sandbox をつけるといいよと書いてあります。

github.com

私のDocker環境では --no-sandbox だけではだめで、
--headless --no-sandbox --disable-gpu が必要でした。

これらはlighthouseのオプションではなく、chromeのオプションのため
lighthouseを実行するときには --chrome-flags="--headless --no-sandbox --disable-gpu" のようにして渡さなければなりません。

ということで以下のコマンドで実行できました。

lighthouse  --chrome-flags="--headless --no-sandbox --disable-gpu"  http://example.com