💿

Playwrightを使ったスクレイピングがDockerで動かない

2022/03/01に公開

これはなに?

Dockerコンテナ上でPlaywrightを使ったスクレイピングをしたら少しハマったので、その時の対処方法です。

経緯

コード自体はローカルでは動いていたので、Dockerイメージをビルド。いざdocker run したところ、エラーが出て動きませんでした。

エラーは以下

Failed to launch browser: Error: spawn ...chrome ENOENT

使用したイメージは

  • node:16-alpine

コンテナに入って、CLIから実行しても、同じエラーが出てしまいます。
Alpine Linuxにapkで色々入れていけばイケけそう?ですが、、

https://pkgs.alpinelinux.org/package/edge/community/x86_64/chromium

apk update
apk add chromium
# などなど...

しかし「あぁ、chromeを入れ直せば良いのか」とパっとやった感じでは解決出来ませんでした。
これはさらなる沼にハマりそうな予感が。。

という事で、今回はサクッと諦めてシンプルにMicrosoft社が配布する公式イメージを利用して対応しました。

Playwright By Microsoft

このイメージを使うと

docker pull mcr.microsoft.com/playwright

👇こんな感じで、指定したページのスクショを簡単に撮ってくる事が出来ます。

docker run -it --rm -v [ホスト側の保存先を指定]:/captures mcr.microsoft.com/playwright:latest npx playwright screenshot --full-page zenn.dev ./captures/sample.png

yarnも最初から入っている様です。

docker run -it --rm mcr.microsoft.com/playwright:latest /bin/bash

# Container
yarn -v
1.22.17

node

node -v
v16.14.0

という事で、使用しているイメージを差し替えるだけで良さそうです。

(たった1行)書き換えたDockerfile

# FROM node:16-alpine
FROM mcr.microsoft.com/playwright

WORKDIR /usr/src/app
ENV TZ Asia/Tokyo

COPY . .
RUN yarn install --frozen-lockfile
RUN yarn build

ENTRYPOINT ["yarn"]

これでBuild&Runしたところ、無事に動きました🎉

デメリット

出来上がったイメージサイズが、alpineと比較してなんと1.5倍くらいになってしまいました。。🙀
これは要件によっては致命的になりうるので、その場合は自力でイメージを作る必要がありそうです。(やっぱりなんでもトレードオフ)

Discussion