既存のDocker環境にPlaywrightを導入する手順を
なぜDockerでPlaywrightを動かすのか?
1コンテナ1サービスの原則に従う場合、
Playwright導入のためのコード
PlaywrightをDockerで実行するためには、
1. docker-compose.yml
playwright:
image: mcr.microsoft.com/playwright: v1.43.1-jammy
command: sleep infinity
volumes:
- ../:/usr/src/app
extra_hosts:
- "host.docker.internal:host- gateway"
詳細な解説
image: mcr.microsoft.com/playwright:v1.43.1-jammy
Playwrightの特定のバージョン(v1.43.1)と、Ubuntu 22.04 JammyベースのDockerイメージを指定します。 このイメージには、 Playwrightの依存関係がすべて含まれています。 command: sleep infinity
コンテナを無限に実行し続けるコマンドです。これにより、Playwrightのテスト実行時までコンテナを保持しておく ことができます。 volumes:../:/usr/src/appは、ホストマシンの親ディレクトリをコンテナ内の/usr/src/appにマウントします。これにより、ホスト上のテストコードをコンテナ内で参照できるようになります 。 extra_hosts:"host.docker.internal:host-は、コンテナ内からホストマシンにアクセスするための設定です。gateway" 通常、コンテナ内の localhostはコンテナ自身を指すため、ホストマシン上で稼働しているサービス(例: Railsサーバー)に直接アクセスできません。
この設定により、host.docker.internalというホスト名をhost-gatewayに解決し、コンテナからホストマシン上のサービスにアクセス可能にします。
host.docker.internalとは?
host.docker.internal は、Dockerが提供する特別なホスト名で、
host-gatewayとは?
host-gateway は、Docker 20.10.0以降で導入された機能で、
2. Railsの設定変更
Railsアプリケーションがdevelopment環境で動作host. を許可する必要があります。
config/environments/ development.rb
Rails.application.configure do
# 他の設定...
# Dockerコンテナ内からホストマシンにアクセスするためのホスト名を許可
config.hosts << 'host.docker.internal'
end
Railsのdevelopment環境では、default で Rails.application.config.hosts に下記の Host が登録されています。
これ以外のHost 名として接続しようとすると、ブロックされるため追加で host.docker.internal を含めることで、コンテナ内からホストマシンに接続できます。
まとめ
この手順に従うことで、