DockerでPuppeteerが動かなときはchromiumのバージョンを疑え
DockerでPuppeteerが動かなときはchromiumのバージョンを疑え

Dockerイメージ node:10-alpine でPuppeteerを起動しようとしたが、await puppeteer.launch() で止まったままエラーも吐かずにTimeoutしてしまう現象が起きた。

PuppeteerのトラブルシューティングのRunning on Alpineに従って設定した。

原因はChromiumのバージョンが古い

node:10-alpineではapkのリポジトリが3.8で、

http://dl-cdn.alpinelinux.org/alpine/v3.8/main
http://dl-cdn.alpinelinux.org/alpine/v3.8/community

そのバージョンでインストールできるChromiumは、68.0.3440.75-r0だった。

そして、トラブルシューティングのページにコメントアウトで# Installs latest Chromium (77) package.と書いてある。

これはChromiumがバージョン77以上じゃないと動かないよ〜という意味かはわからないが、とりあえず最新版(chromium-83.0.4103.116-r0)をインストールしたら、無事Puppeteerが動いた。

node:10-alpineではapkのリポジトリが3.8で、Chrominiumのバージョンが古い

Chromiumの最新版をインストール

Chromiumの最新版をインストールするため、apkのリポジトリを最新版にしてインストールをする。

ただapk updateをしてもリポジトリが変わらないので、リポジトリを指定してupgradeする。

Dockerを使ってない人はsetup-apkreposでレポジトリを最新版に書き換えてapk upgradeすればよい。

Dockerを使っている人は、-X|--repositoryオプションで最新のレポジトリを指定してアップグレードすればよい。

$ docker-compose exec server sh

$ apk upgrade --no-cache \
  -X http://dl-cdn.alpinelinux.org/alpine/v3.12/main \
  -X http://dl-cdn.alpinelinux.org/alpine/v3.12/community \
  chromium

レポジトリの最新バージョンは、こちらのページから確認できる

インストールしたchromiumのバージョンは以下で確認。

$ apk info chromium
chromium-83.0.4103.116-r0 description:
Chromium web browser

chromium-83.0.4103.116-r0 webpage:
https://www.chromium.org/Home

chromium-83.0.4103.116-r0 installed size:
247402496

そもそもnode:10-alineが古いのが原因だった

サーバーにnode:10-alpineイメージをインストールしたのが1年前で、いろいろ古いのが原因だった。
nodeイメージをアップグレードすれば、alpineのバージョンも3.11がインストールされているので解消できた。

$ docker pull node:10-alpine
$ docker-compose build server
$ docker-compose up -d server