既存の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
を含めることで、コンテナ内からホストマシンに接続できます。
まとめ
この手順に従うことで、