Docker
はじめに
Dockerfile.noble は、Docker環境でPlaywrightスクリプトを実行するために使用できます。このイメージには、Playwrightブラウザとブラウザのシステム依存関係が含まれています。Playwrightパッケージ/依存関係はイメージには含まれていないため、別途インストールする必要があります。
使用方法
このDockerイメージはMicrosoft Artifact Registryで公開されています。
このDockerイメージはテストおよび開発目的のみを意図しています。このDockerイメージを使用して信頼できないウェブサイトにアクセスすることは推奨されません。
イメージのプル
docker pull mcr.microsoft.com/playwright:v1.52.0-noble
イメージの実行
デフォルトでは、Dockerイメージはroot
ユーザーを使用してブラウザを実行します。これにより、rootでは利用できないChromiumサンドボックスが無効になります。信頼できるコード(例:エンドツーエンドテスト)を実行し、個別のユーザーを管理する手間を避けたい場合は、rootユーザーでも問題ありません。ウェブスクレイピングやクローリングの場合、Dockerコンテナ内に別のユーザーを作成し、seccompプロファイルを使用することをお勧めします。
エンドツーエンドテスト
信頼できるウェブサイトでは、ブラウザ上で実行されるコードを信頼しているため、別のユーザーを作成せずにrootを使用することができます。
docker run -it --rm --ipc=host mcr.microsoft.com/playwright:v1.52.0-noble /bin/bash
クローリングとスクレイピング
信頼できないウェブサイトでは、seccompプロファイルと組み合わせてブラウザを起動するために別のユーザーを使用することをお勧めします。コンテナ内またはDockerイメージをベースイメージとして使用している場合は、adduser
を使用する必要があります。
docker run -it --rm --ipc=host --user pwuser --security-opt seccomp=seccomp_profile.json mcr.microsoft.com/playwright:v1.52.0-noble /bin/bash
seccomp_profile.json
は、サンドボックス付きでChromiumを実行するために必要です。これは、ユーザーネームスペースのクローニング権限が追加されたデフォルトのDocker seccompプロファイルです。
{
"comment": "Allow create user namespaces",
"names": [
"clone",
"setns",
"unshare"
],
"action": "SCMP_ACT_ALLOW",
"args": [],
"includes": {},
"excludes": {}
}
推奨されるDocker設定
DockerでPlaywrightを実行する場合、以下の設定が推奨されます。
--init
Dockerフラグを使用することは、PID=1のプロセスに対する特別な処理を避けるために推奨されます。これはゾンビプロセスの一般的な原因です。--ipc=host
の使用はChromiumを使用する場合に推奨されます。これがないと、Chromiumがメモリ不足になりクラッシュする可能性があります。このオプションの詳細については、Dockerドキュメントを参照してください。- Chromiumの起動時に奇妙なエラーが発生する場合、ローカルで開発中にコンテナを
docker run --cap-add=SYS_ADMIN
で実行してみてください。
CIでの使用
サンプル設定については、継続的インテグレーションガイドを参照してください。
リモート接続
DockerでPlaywrightサーバーを実行し、テストはホストシステムまたは別のマシンで実行し続けることができます。これは、サポートされていないLinuxディストリビューションでのテスト実行やリモート実行のシナリオで役立ちます。
Playwrightサーバーの実行
DockerでPlaywrightサーバーを起動します。
docker run -p 3000:3000 --rm --init -it --workdir /home/pwuser --user pwuser mcr.microsoft.com/playwright:v1.52.0-noble /bin/sh -c "npx -y playwright@1.52.0 run-server --port 3000 --host 0.0.0.0"
サーバーへの接続
リモートPlaywrightサーバーに接続する方法は2つあります。
@playwright/test
で環境変数を使用する。
PW_TEST_CONNECT_WS_ENDPOINT=ws://127.0.0.1:3000/ npx playwright test
- その他のアプリケーションにはbrowserType.connect() APIを使用する。
const browser = await playwright['chromium'].connect('ws://127.0.0.1:3000/');
ネットワーク設定
Dockerコンテナ内からローカルサーバーにアクセスする必要がある場合。
docker run --add-host=hostmachine:host-gateway -p 3000:3000 --rm --init -it --workdir /home/pwuser --user pwuser mcr.microsoft.com/playwright:v1.52.0-noble /bin/sh -c "npx -y playwright@1.52.0 run-server --port 3000 --host 0.0.0.0"
これにより、hostmachine
がホストのlocalhostを指すようになります。テストでは、ローカルサーバーにアクセスする際にlocalhost
の代わりにhostmachine
を使用する必要があります。
リモートでテストを実行する場合、テスト内のPlaywrightのバージョンがDockerコンテナで実行されているバージョンと一致していることを確認してください。
イメージタグ
利用可能なすべてのイメージタグを参照してください。
現在、以下のタグでイメージを公開しています。
:v1.52.0
- Ubuntu 24.04 LTS (Noble Numbat) ベースの Playwright v1.52.0 リリース版 Docker イメージ。:v1.52.0-noble
- Ubuntu 24.04 LTS (Noble Numbat) ベースの Playwright v1.52.0 リリース版 Docker イメージ。:v1.52.0-jammy
- Ubuntu 22.04 LTS (Jammy Jellyfish) ベースの Playwright v1.52.0 リリース版 Docker イメージ。
可能な限り、Dockerイメージを特定のバージョンに固定することを常にお勧めします。Dockerイメージ内のPlaywrightのバージョンがプロジェクト/テストのバージョンと一致しない場合、Playwrightはブラウザの実行可能ファイルを特定できません。
ベースイメージ
現在、以下のUbuntuバージョンをベースとしたイメージを公開しています。
- Ubuntu 24.04 LTS (Noble Numbat)、イメージタグに
noble
が含まれます。 - Ubuntu 22.04 LTS (Jammy Jellyfish)、イメージタグに
jammy
が含まれます。
Alpine
FirefoxとWebKitのブラウザビルドは、glibcライブラリ用にビルドされています。Alpine Linuxやmusl標準ライブラリをベースとするその他のディストリビューションはサポートされていません。
独自のイメージをビルドする
Docker内でPlaywrightを実行するには、Node.js、Playwrightブラウザ、およびブラウザのシステム依存関係がインストールされている必要があります。以下のDockerfileを参照してください。
FROM node:20-bookworm
RUN npx -y playwright@1.52.0 install --with-deps