このプロジェクトは、何千時間もの時間を費やしたボランティアの貢献者によって実現され、Apache License 2.0 に基づいてソース コードを自由に利用できるようになりました。
これらの Docker イメージには、使用法を簡素化するためのいくつかのタグが付属しています。いずれかのリリースで確認してください。
新しいリリースの通知を受け取るには、自分自身を「リリースのみ」ウォッチャーとして追加します。
これらのイメージは、Selenium Docker Hub の Docker Hub レジストリに公開されます。
これらの Docker イメージを使用するのにサポートが必要ですか? https://www.selenium.dev/support/ までお問い合わせください。
--shm-size="2g"
docker run -d -p 4444:4444 -p 7900:7900 --shm-size= " 2g " selenium/standalone-firefox:4.26.0-20241101
WebDriver テストを http://localhost:4444 に指定します。
それでおしまい!
(オプション) コンテナー内で何が起こっているかを確認するには、http://localhost:7900/?autoconnect=1&resize=scale&password=secret にアクセスします。
コンテナアクティビティの視覚化の詳細については、「デバッグ」セクションを確認してください。
☝️ ブラウザを含むイメージに対してdocker run
実行する場合は、フラグ--shm-size=2g
使用してホストの共有メモリを使用してください。
☝️ 特定のブラウザーとグリッドのバージョンを固定するには、常に完全なタグを含む Docker イメージを使用してください。詳細については、「タグ付け規則」を参照してください。
イメージ タグ ベースの4.21.0
以降、このプロジェクトでサポートされるアーキテクチャは次のとおりです。
建築 | 利用可能 |
---|---|
x86_64 (別名 amd64) | ✅ |
aarch64 (別名 arm64/armv8) | ✅ |
armhf (別名 arm32/armv7l) | ❌ |
マルチ アーキテクチャ イメージでは次のブラウザを使用できます。
建築 | クロム | クロム | Firefox | 角 |
---|---|---|---|---|
x86_64 (別名 amd64) | ✅ | ✅ | ✅ | ✅ |
aarch64 (別名 arm64/armv8) | ❌ | ✅ | ✅ | ❌ |
armhf (別名 arm32/armv7l) | ❌ | ❌ | ❌ | ❌ |
注記:
Google は、Linux/ARM プラットフォーム用の Chrome ( google-chrome
) を構築していません。したがって、Chrome (ノードおよびスタンドアロン) イメージは AMD64 でのみ使用できます。同様に、Microsoft は Linux/ARM プラットフォーム用の Edge ( microsoft-edge
) を構築しません。
パフォーマンスと安定性の問題のため、ARM64 プラットフォーム上のエミュレーションで AMD64 イメージを実行することはお勧めできません。
Linux/ARM の場合は、オープンソースの Chromium ブラウザを使用します。 Chromium (ノードおよびスタンドアロン) イメージはマルチ アーキテクチャで利用できます。
$ docker run --rm -it -p 4444:4444 -p 5900:5900 -p 7900:7900 --shm-size 2g selenium/standalone-chromium:latest
マルチ アーキテクチャ イメージは、リソース クラス Linux/ARM64 を使用して CircleCI でテストされます。以下のステータスを参照してください。
Apple M シリーズや Raspberry Pi などのプラットフォームで実行される実験的な Docker コンテナ イメージの場合、seleniumhq-community/docker-seleniarm のリポジトリは、Seleniarm Docker Hub レジストリで公開されるイメージを提供しました。
これらの画像の詳細については、問題 #1076 を参照してください。
これで、フォーク seleniumhq-community/docker-seleniarm がマージされました。
Docker Engine で実験的機能の containerd イメージ ストアを有効にすることをお勧めします。 containerd
、単一のイメージ タグで、さまざまな OS およびハードウェア アーキテクチャをカバーするさまざまなバリアントを参照できるマルチプラットフォーム イメージを理解します。これにより、さまざまなプラットフォーム間でイメージを構築、保存、配布するプロセスが簡素化されます。
Docker Engine でその機能を有効にする単一のコマンド:
make set_containerd_image_store
マルチプラットフォーム用のすべてのイメージをビルドするには、次のコマンドを実行します。
PLATFORMS=linux/amd64,linux/arm64 make build
特定のプラットフォーム用のイメージをビルドするには、次のコマンドを実行します。
PLATFORMS=linux/arm64 make build
デフォルトでは、 PLATFORMS
変数を指定しないと、イメージはlinux/amd64
プラットフォーム用に構築されます。
Nightly イメージは、このリポジトリのメイン ブランチの最新の変更を使用して、上流プロジェクト Selenium の Nightly ビルドの上に構築されます。イメージタグはnightly
です。これは、実稼働環境でイメージを使用することはお勧めできません。これはテストのみを目的としています。
$ docker run -d -p 4442-4444:4442-4444 --name selenium-hub selenium/hub:nightly
Nightly イメージを開始するには、docker compose を確認してください docker-compose-v3-full-grid-nightly.yml
テストを実行したり、プレリリース ブラウザーで作業したりするために、Google、Mozilla、Microsoft は、間もなく一般向けにリリースされるものを確認する必要があるユーザー向けに、開発およびベータ版のリリース チャネルを維持しています。
スタンドアロン モードで実行する手順は次のとおりです。
Chrome ベータ版:
$ docker run --rm -it -p 4444:4444 -p 7900:7900 --shm-size 2g selenium/standalone-chrome:beta
Chrome 開発者:
$ docker run --rm -it -p 4444:4444 -p 7900:7900 --shm-size 2g selenium/standalone-chrome:dev
Firefox ベータ版:
$ docker run --rm -it -p 4444:4444 -p 7900:7900 --shm-size 2g selenium/standalone-firefox:beta
Firefox 開発者:
$ docker run --rm -it -p 4444:4444 -p 7900:7900 --shm-size 2g selenium/standalone-firefox:dev
エッジベータ:
$ docker run --rm -it -p 4444:4444 -p 7900:7900 --shm-size 2g selenium/standalone-edge:beta
エッジ開発:
$ docker run --rm -it -p 4444:4444 -p 7900:7900 --shm-size 2g selenium/standalone-edge:dev
docker-compose-v3-beta-channel.yml:
# To execute this docker compose yml file use `docker compose -f docker-compose-v3-beta-channel.yml up`
# Add the `-d` flag at the end for detached execution
# To stop the execution, hit Ctrl+C, and then `docker compose -f docker-compose-v3-beta-channel.yml down`
version: " 3 "
services:
chrome:
image: selenium/node-chrome:beta
shm_size: 2gb
depends_on:
- selenium-hub
environment:
- SE_EVENT_BUS_HOST=selenium-hub
- SE_EVENT_BUS_PUBLISH_PORT=4442
- SE_EVENT_BUS_SUBSCRIBE_PORT=4443
edge:
image: selenium/node-edge:beta
shm_size: 2gb
depends_on:
- selenium-hub
environment:
- SE_EVENT_BUS_HOST=selenium-hub
- SE_EVENT_BUS_PUBLISH_PORT=4442
- SE_EVENT_BUS_SUBSCRIBE_PORT=4443
firefox:
image: selenium/node-firefox:beta
shm_size: 2gb
depends_on:
- selenium-hub
environment:
- SE_EVENT_BUS_HOST=selenium-hub
- SE_EVENT_BUS_PUBLISH_PORT=4442
- SE_EVENT_BUS_SUBSCRIBE_PORT=4443
selenium-hub:
image: selenium/hub:latest
container_name: selenium-hub
ports:
- " 4442:4442 "
- " 4443:4443 "
- " 4444:4444 "
docker-compose-v3-dev-channel.yml:
# To execute this docker compose yml file use `docker compose -f docker-compose-v3-dev-channel.yml up`
# Add the `-d` flag at the end for detached execution
# To stop the execution, hit Ctrl+C, and then `docker compose -f docker-compose-v3-dev-channel.yml down`
version: " 3 "
services:
chrome:
image: selenium/node-chrome:dev
shm_size: 2gb
depends_on:
- selenium-hub
environment:
- SE_EVENT_BUS_HOST=selenium-hub
- SE_EVENT_BUS_PUBLISH_PORT=4442
- SE_EVENT_BUS_SUBSCRIBE_PORT=4443
edge:
image: selenium/node-edge:dev
shm_size: 2gb
depends_on:
- selenium-hub
environment:
- SE_EVENT_BUS_HOST=selenium-hub
- SE_EVENT_BUS_PUBLISH_PORT=4442
- SE_EVENT_BUS_SUBSCRIBE_PORT=4443
firefox:
image: selenium/node-firefox:dev
shm_size: 2gb
depends_on:
- selenium-hub
environment:
- SE_EVENT_BUS_HOST=selenium-hub
- SE_EVENT_BUS_PUBLISH_PORT=4442
- SE_EVENT_BUS_SUBSCRIBE_PORT=4443
selenium-hub:
image: selenium/hub:latest
container_name: selenium-hub
ports:
- " 4442:4442 "
- " 4443:4443 "
- " 4444:4444 "
Dev および Beta チャネルのコンテナー イメージの詳細については、Docker Selenium を使用した Dev および Beta チャネル ブラウザーに関するブログ投稿を参照してください。
Firefox
docker run -d -p 4444:4444 --shm-size= " 2g " selenium/standalone-firefox:4.26.0-20241101
クロム
docker run -d -p 4444:4444 --shm-size= " 2g " selenium/standalone-chrome:4.26.0-20241101
角
docker run -d -p 4444:4444 --shm-size= " 2g " selenium/standalone-edge:4.26.0-20241101
注: ポート4444
で同時に実行できるスタンドアロン コンテナは 1 つだけです。
イメージを実行し、ハブとノードを含むグリッドを作成するにはさまざまな方法があります。次のオプションを確認してください。
ハブとノードは同じネットワーク内に作成され、コンテナ名で相互に認識されます。最初のステップとして、Docker ネットワークを作成する必要があります。
$ docker network create grid
$ docker run -d -p 4442-4444:4442-4444 --net grid --name selenium-hub selenium/hub:4.26.0-20241101
$ docker run -d --net grid -e SE_EVENT_BUS_HOST=selenium-hub
--shm-size= " 2g "
-e SE_EVENT_BUS_PUBLISH_PORT=4442
-e SE_EVENT_BUS_SUBSCRIBE_PORT=4443
selenium/node-chrome:4.26.0-20241101
$ docker run -d --net grid -e SE_EVENT_BUS_HOST=selenium-hub
--shm-size= " 2g "
-e SE_EVENT_BUS_PUBLISH_PORT=4442
-e SE_EVENT_BUS_SUBSCRIBE_PORT=4443
selenium/node-edge:4.26.0-20241101
$ docker run -d --net grid -e SE_EVENT_BUS_HOST=selenium-hub
--shm-size= " 2g "
-e SE_EVENT_BUS_PUBLISH_PORT=4442
-e SE_EVENT_BUS_SUBSCRIBE_PORT=4443
selenium/node-firefox:4.26.0-20241101
$ docker network create grid
$ docker run - d - p 4442 - 4444 : 4442 - 4444 -- net grid -- name selenium - hub selenium / hub: 4.26 . 0 - 20241101
$ docker run - d -- net grid - e SE_EVENT_BUS_HOST = selenium - hub `
-- shm - size = " 2g " `
- e SE_EVENT_BUS_PUBLISH_PORT = 4442 `
- e SE_EVENT_BUS_SUBSCRIBE_PORT = 4443 `
selenium / node - chrome: 4.26 . 0 - 20241101
$ docker run - d -- net grid - e SE_EVENT_BUS_HOST = selenium - hub `
-- shm - size = " 2g " `
- e SE_EVENT_BUS_PUBLISH_PORT = 4442 `
- e SE_EVENT_BUS_SUBSCRIBE_PORT = 4443 `
selenium / node - edge: 4.26 . 0 - 20241101
$ docker run - d -- net grid - e SE_EVENT_BUS_HOST = selenium - hub `
-- shm - size = " 2g " `
- e SE_EVENT_BUS_PUBLISH_PORT = 4442 `
- e SE_EVENT_BUS_SUBSCRIBE_PORT = 4443 `
selenium / node - firefox: 4.26 . 0 - 20241101
グリッドの使用が完了し、コンテナーが終了したら、次のコマンドを使用してネットワークを削除できます。
# Removes the grid network
$ docker network rm grid
ハブとノードは異なるマシン/VM 上に作成されます。適切に通信するには、相互の IP を認識する必要があります。複数のノードが同じマシン/VM 上で実行される場合は、異なるポートを公開するように構成する必要があります。
$ docker run -d -p 4442-4444:4442-4444 --name selenium-hub selenium/hub:4.26.0-20241101
$ docker run -d -p 5555:5555 --shm-size= " 2g " -e SE_EVENT_BUS_HOST= < ip-from-machine- 1> -e SE_EVENT_BUS_PUBLISH_PORT=4442 -e SE_EVENT_BUS_SUBSCRIBE_PORT=4443 -e SE_NODE_HOST= < ip-from-machine- 2> selenium/node-chrome:4.26.0-20241101
$ docker run - d - p 5555 : 5555 ` -- shm - size = " 2g " ` - e SE_EVENT_BUS_HOST = < ip - from - machine - 1> ` - e SE_EVENT_BUS_PUBLISH_PORT = 4442 ` - e SE_EVENT_BUS_SUBSCRIBE_PORT = 4443 ` - e SE_NODE_HOST = < ip - from - machine - 2> ` selenium / node - chrome: 4.26 . 0 - 20241101
$ docker run -d -p 5555:5555 --shm-size= " 2g " -e SE_EVENT_BUS_HOST= < ip-from-machine- 1> -e SE_EVENT_BUS_PUBLISH_PORT=4442 -e SE_EVENT_BUS_SUBSCRIBE_PORT=4443 -e SE_NODE_HOST= < ip-from-machine- 3> selenium/node-edge:4.26.0-20241101
$ docker run - d - p 5555 : 5555 ` -- shm - size = " 2g " ` - e SE_EVENT_BUS_HOST = < ip - from - machine - 1> ` - e SE_EVENT_BUS_PUBLISH_PORT = 4442 ` - e SE_EVENT_BUS_SUBSCRIBE_PORT = 4443 ` - e SE_NODE_HOST = < ip - from - machine - 3> ` selenium / node - edge: 4.26 . 0 - 20241101
$ docker run -d -p 5555:5555 --shm-size= " 2g " -e SE_EVENT_BUS_HOST= < ip-from-machine- 1> -e SE_EVENT_BUS_PUBLISH_PORT=4442 -e SE_EVENT_BUS_SUBSCRIBE_PORT=4443 -e SE_NODE_HOST= < ip-from-machine- 4> selenium/node-firefox:4.26.0-20241101
$ docker run - d - p 5555 : 5555 ` -- shm - size = " 2g " ` - e SE_EVENT_BUS_HOST = < ip - from - machine - 1> ` - e SE_EVENT_BUS_PUBLISH_PORT = 4442 ` - e SE_EVENT_BUS_SUBSCRIBE_PORT = 4443 ` - e SE_NODE_HOST = < ip - from - machine - 4> ` selenium / node - firefox: 4.26 . 0 - 20241101
$ docker run -d -p 5556:5556 --shm-size= " 2g " -e SE_EVENT_BUS_HOST= < ip-from-machine- 1> -e SE_EVENT_BUS_PUBLISH_PORT=4442 -e SE_EVENT_BUS_SUBSCRIBE_PORT=4443 -e SE_NODE_HOST= < ip-from-machine- 4> -e SE_NODE_PORT=5556 selenium/node-chrome:4.26.0-20241101
$ docker run - d - p 5556 : 5556 ` -- shm - size = " 2g " ` - e SE_EVENT_BUS_HOST = < ip - from - machine - 1> ` - e SE_EVENT_BUS_PUBLISH_PORT = 4442 ` - e SE_EVENT_BUS_SUBSCRIBE_PORT = 4443 ` - e SE_NODE_HOST = < ip - from - machine - 4> ` - e SE_NODE_PORT = 5556 ` selenium / node - chrome: 4.26 . 0 - 20241101
Docker Compose は、グリッドを開始する最も簡単な方法です。以下のリンクされたリソースを使用してローカルに保存し、各ファイルの先頭にある実行手順を確認してください。
docker-compose-v2.yml
docker-compose-v3.yml
グリッドを停止し、作成されたコンテナーをクリーンアップするには、 docker compose down
実行します。
docker-compose-v3-swarm.yml
Selenium グリッドをすべてのコンポーネントから切り離して起動することができます。わかりやすくするために、docker compose を使用した例のみを示します。ファイルをローカルに保存し、その上で実行手順を確認します。
docker-compose-v3-full-grid.yml
環境変数 | オプション | タイプ | デフォルト値 | 説明 |
---|---|---|---|---|
SE_REJECT_UNSUPPORTED_CAPS | --reject-unsupported-caps | ブール値 | false | リクエストされた機能をグリッドがサポートしていない場合、ディストリビューターがリクエストを即座に拒否できるようにします。 |
SE_HEALTHCHECK_INTERVAL | --healthcheck-interval | 整数 | 120 | これにより、一定間隔後にサーバーがすべてのノードに正常に ping できるようになります。 |
テストの実行は、 selenium/video:ffmpeg-7.1-20241101
Docker イメージを使用して記録できます。ブラウザが実行されているコンテナごとに 1 つのコンテナが必要です。これは、5 つのノード/スタンドアロン コンテナーを実行している場合、5 つのビデオ コンテナーが必要となり、マッピングは 1-1 であることを意味します。
現在、このマッピングを行う唯一の方法は手動です (コンテナーを手動で起動するか、 docker compose
使用して行うかのいずれかです)。私たちはこのプロセスを繰り返しており、おそらくこのセットアップは将来的にはよりシンプルになるでしょう。
私たちが提供するビデオ Docker イメージは、jrottenberg/ffmpeg プロジェクトによって提供される ffmpeg Ubuntu イメージに基づいています。このイメージを提供し、作業を簡素化していただきありがとうございます。
イメージ タグ ベースの4.20.0
以降、ビデオ Docker イメージはマルチプラットフォームで利用できるため、linuxserver/docker-ffmpeg プロジェクトによって提供される FFmpeg Ubuntu イメージに基づいています。私たちのプロジェクトを簡素化し、複数のアーキテクチャのサポートを進めるのに協力していただきありがとうございます。
注:
/videos
ディレクトリに保存されます。ローカル ディレクトリをマップしてビデオを取得します。FILE_NAME
環境変数を使用してビデオ ファイル名を必ず上書きしてください。この例は、コンテナを手動で起動する方法を示しています。
$ docker network create grid
$ docker run -d -p 4444:4444 -p 6900:5900 --net grid --name selenium --shm-size= " 2g " selenium/standalone-chrome:4.26.0-20241101
$ docker run -d --net grid --name video -v /tmp/videos:/videos selenium/video:ffmpeg-7.1-20241101
# Run your tests
$ docker stop video && docker rm video
$ docker stop selenium && docker rm selenium
コンテナーを停止して削除すると、マシンの/tmp/videos
ディレクトリにビデオ ファイルが表示されるはずです。
以下は、ハブといくつかのノードを使用した例です。
docker-compose-v3-video.yml
テストでのメタデータのサポートに基づいています。 SE_VIDEO_FILE_NAME=auto
を有効にし、テストにメタデータを追加して、ビデオ レコーダーがブラウザ ノードでサイドカーにデプロイされると、ビデオ ファイル名は機能se:name
の値を抽出し、それをビデオ ファイル名として使用します。
たとえば、Python バインディングでは次のようになります。
from selenium . webdriver . chrome . options import Options as ChromeOptions
from selenium import webdriver
options = ChromeOptions ()
options . set_capability ( 'se:name' , 'test_visit_basic_auth_secured_page (ChromeTests)' )
driver = webdriver . Remote ( options = options , command_executor = "http://localhost:4444" )
driver . get ( "https://selenium.dev" )
driver . quit ()
出力ビデオ ファイル名はtest_visit_basic_auth_secured_page_ChromeTests_
になります。
テスト名がテスト フレームワークによって処理され、確実に一意である場合は、 SE_VIDEO_FILE_NAME_SUFFIX=false
を設定して、ビデオ ファイル名に追加されるセッション ID を無効にすることもできます。
ファイル名が長くならないように、ファイル名は 255 文字に切り詰められます。また、 space
文字は_
に置き換えられ、ファイル名にはアルファベット、数字、 -
(ハイフン)、 _
(アンダースコア)の文字のみが残ります。
トリム正規表現は、 SE_VIDEO_FILE_NAME_TRIM_REGEX
環境変数を設定することでカスタマイズできます。デフォルト値は[:alnum:]-_
です。正規表現は bash のtr
コマンドと互換性がある必要があります。
デプロイメント レベルでは、レコーダー コンテナーは常に稼働しています。さらに、セッション機能se:recordVideo
を介してビデオ録画プロセスを無効にすることもできます。たとえば、Python バインディングでは次のようになります。
options . set_capability ( 'se:recordVideo' , False )
レコーダー コンテナーでは、ビデオ録画プロセスを開始するかどうかを決定する前に、ノード セッション ID に基づいてハブでクエリ GraphQL を実行し、capability のse:recordVideo
の値を抽出します。
注: GraphQL エンドポイントに到達するには、レコーダー コンテナーがハブ URL を知っている必要があります。ハブ URL は、環境変数SE_NODE_GRID_URL
を介して渡すことができます。たとえば、 SE_NODE_GRID_URL
http://selenium-hub:4444
です。
RCLONEはビデオレコーダーイメージにインストールされています。これを使用して、ビデオをクラウド ストレージ サービスにアップロードできます。上記のビデオ録画に加えて、次の環境変数を設定することでアップロード機能を有効にすることができます。
version : " 3 "
services :
chrome_video :
image : selenium/video:ffmpeg-7.1-20241101
depends_on :
- chrome
environment :
- DISPLAY_CONTAINER_NAME=chrome
- SE_VIDEO_FILE_NAME=auto
- SE_VIDEO_UPLOAD_ENABLED=true
- SE_UPLOAD_DESTINATION_PREFIX=s3://mybucket/path
- RCLONE_CONFIG_S3_TYPE=s3
- RCLONE_CONFIG_S3_PROVIDER=GCS
- RCLONE_CONFIG_S3_ENV_AUTH=true
- RCLONE_CONFIG_S3_REGION=asia-southeast1
- RCLONE_CONFIG_S3_LOCATION_CONSTRAINT=asia-southeast1
- RCLONE_CONFIG_S3_ACL=private
- RCLONE_CONFIG_S3_ACCESS_KEY_ID=xxx
- RCLONE_CONFIG_S3_SECRET_ACCESS_KEY=xxx
- RCLONE_CONFIG_S3_ENDPOINT=https://storage.googleapis.com
- RCLONE_CONFIG_S3_NO_CHECK_BUCKET=true
SE_VIDEO_FILE_NAME=auto
セッション ID をビデオ ファイル名として使用します。これにより、アップロードするビデオ ファイル名が確実に一意になります。ビデオ ファイル名の構築は、ノード エンドポイント/status
(およびオプションの GraphQL エンドポイント) に基づいて自動的に機能し、セッション ID と機能を取得します。
SE_VIDEO_UPLOAD_ENABLED=true
指定すると、ビデオのアップロード機能が有効になります。バックグラウンドで、アップローダーが使用して続行するためのファイルと宛先を含むパイプファイルが作成されます。
SE_VIDEO_INTERNAL_UPLOAD=true
コンテナにインストールされている RCLONE をアップロードに使用します。アップロードに別のサイドカー コンテナを使用する場合は、 false
に設定します。
モードごとの ENV 変数 | ハブ/ノード | スタンドアロンの役割 | ダイナミックグリッド |
---|---|---|---|
SE_VIDEO_RECORD_STANDALONE (必須) | false (デフォルト) | true | true |
DISPLAY_CONTAINER_NAME (必須) | ユーザー入力 | ユーザー入力 | (必須ではありません) |
SE_NODE_PORT (オプション) | 5555 | 4444 | (必須ではありません) |
SE_NODE_GRID_URL (オプション) | ユーザー入力 | (必須ではありません) | (必須ではありません) |
プレフィックスRCLONE_
が付いた環境変数の場合、リモート設定を RCLONE に渡すために使用されます。 RCLONE 構成の詳細については、ここを参照してください。動的グリッドで使用する場合、これらの変数は接頭辞SE_
と組み合わせる必要があります (例: SE_RCLONE_
。詳細については、以下のリファレンスを参照してください。
ハブとノードのビデオの録画とアップロードを構成する: docker-compose-v3-video-upload.yml
スタンドアロン ロールのビデオ録画とアップロードを構成する: docker-compose-v3-video-upload-standalone.yml
動的グリッド (node-docker) のビデオの録画とアップロードを構成します: docker-compose-v3-video-upload-dynamic-grid.yml
Dynamic Grid スタンドアロン (standalone-docker) のビデオの録画とアップロードを構成します: testing/docker-compose-v3-test-standalone-docker.yaml
環境変数 | デフォルト値 | 説明 |
---|---|---|
SE_UPLOAD_RETAIN_LOCAL_FILE | false | アップロードに成功した後、ローカル ファイルを保持する |
SE_UPLOAD_COMMAND | copy | ファイル転送にはRCLONEコマンドを使用します。ローカル ファイルの保持がfalse 場合にmove 強制する |
SE_UPLOAD_OPTS | -P --cutoff-mode SOFT --metadata --inplace | RCLONEコマンドに属する他のオプションを設定できます。 |
SE_UPLOAD_CONFIG_FILE_NAME | upload.conf | 環境変数プレフィックス SE_RCLONE_* を介して設定するのではなく、リモート ホストの構成ファイル |
SE_UPLOAD_CONFIG_DIRECTORY | /opt/bin | configファイルのディレクトリ(別ディレクトリのconfファイルがマウントされている場合は変更してください) |
Grid 4 には、オンデマンドで Docker コンテナを起動する機能があります。これは、新しいセッション リクエストごとにバックグラウンドで Docker コンテナを起動し、そこでテストが実行され、テストが完了するとコンテナが破棄されることを意味します。
この実行モードは、スタンドアロン ロールまたはノード ロールのいずれかで使用できます。 「動的」実行モードには、コンテナーの開始時にどの Docker イメージを使用するかを指示する必要があります。さらに、グリッドは Docker デーモンの URI を知っている必要があります。この設定はローカルのtoml
ファイルに配置できます。
このファイルをローカルに保存し、たとえばconfig.toml
名前を付けることができます。
[ docker ] # Configs have a mapping between the Docker image to use and the capabilities that need to be matched to # start a container with the given image. configs = [ " selenium/standalone-firefox:4.26.0-20241101 " , ' {"browserName": "firefox"} ' , " selenium/standalone-chrome:4.26.0-20241101 " , ' {"browserName": "chrome"} ' , " selenium/standalone-edge:4.26.0-20241101 " , ' {"browserName": "MicrosoftEdge"} ' ] host-config-keys = [ " Dns " , " DnsOptions " , " DnsSearch " , " ExtraHosts " , " Binds " ] # URL for connecting to the docker daemon # Most simple approach, leave it as http://127.0.0.1:2375, and mount /var/run/docker.sock. # 127.0.0.1 is used because internally the container uses socat when /var/run/docker.sock is mounted # If var/run/docker.sock is not mounted: # Windows: make sure Docker Desktop exposes the daemon via tcp, and use http://host.docker.internal:2375. # macOS: install socat and run the following command, socat -4 TCP-LISTEN:2375,fork UNIX-CONNECT:/var/run/docker.sock, # then use http://host.docker.internal:2375. # Linux: varies from machine to machine, please mount /var/run/docker.sock. If this does not work, please create an issue. url = " http://127.0.0.1:2375 " # Docker image used for video recording video-image = " selenium/video:ffmpeg-7.1-20241101 " # Uncomment the following section if you are running the node on a separate VM # Fill out the placeholders with appropriate values # [server] # host =# port =
config.toml ファイルのセクション [docker] にあるオプションの構成キーhost-config-keys
(または CLI オプション --docker-host-config-keys) を使用します。ユーザーは、ブラウザ コンテナに渡す必要がある Docker ホスト構成キーのリストを指定できます。
Docker ホスト構成の有効なキー名は、Docker API ドキュメントで確認するか、コマンドdocker inspect
the node-docker コンテナーで確認できます。
Dynamic Grid コンテナのボリューム構成を介してノード ブラウザ コンテナ (例: /home/seluser/Downloads
) のダウンロード ディレクトリにアクセスする場合は、次の構成をconfig.toml
ファイルに追加できます。
[ docker ]
host-config-keys = [ " Binds " ]
docker compose ファイルのボリューム構成
services :
node-docker :
image : selenium/node-docker:latest
volumes :
- ./assets:/opt/selenium/assets
- ./config.toml:/opt/selenium/docker.toml
- ./downloads:/home/seluser/Downloads
- /var/run/docker.sock:/var/run/docker.sock
environment :
- SE_NODE_DOCKER_CONFIG_FILENAME=docker.toml
/opt/selenium/config.toml
、すべてのイメージ内の構成ファイルのデフォルトのパスです。ボリューム構成がノード ブラウザー コンテナーに共有されると、そのconfig.toml
ノードドッカー コンテナー構成ファイルによって上書きされる可能性があります。
この場合、 config.toml
ファイルを node-docker コンテナーの/opt/selenium/docker.toml
にマウントします。そして、環境変数SE_NODE_DOCKER_CONFIG_FILENAME=docker.toml
を設定して、起動スクリプトの構成ファイル名を指定します。
docker-compose-v3-test-node-docker.yaml の例を参照してください。
これは、すべてのコンポーネントを個別に展開する完全なグリッド展開に拡張できます。全体的な考え方は、ハブを 1 つの仮想マシンに配置し、各ノードを個別のより強力な仮想マシンに配置することです。
$ docker network create grid
$ docker run -d -p 4442-4444:4442-4444 --net grid --name selenium-hub selenium/hub:4.26.0-20241101
$ docker run -d --net grid -e SE_EVENT_BUS_HOST=selenium-hub
-e SE_EVENT_BUS_PUBLISH_PORT=4442
-e SE_EVENT_BUS_SUBSCRIBE_PORT=4443
-v ${PWD} /config.toml:/opt/selenium/config.toml
-v ${PWD} /assets:/opt/selenium/assets
-v /var/run/docker.sock:/var/run/docker.sock
selenium/node-docker:4.26.0-20241101
$ docker network create grid
$ docker run - d - p 4442 - 4444 : 4442 - 4444 -- net grid -- name selenium - hub selenium / hub: 4.26 . 0 - 20241101
$ docker run - d -- net grid - e SE_EVENT_BUS_HOST = selenium - hub `
- e SE_EVENT_BUS_PUBLISH_PORT = 4442 `
- e SE_EVENT_BUS_SUBSCRIBE_PORT = 4443 `
- v ${PWD} / config.toml: / opt / selenium / config.toml `
- v ${PWD} / assets: / opt / selenium / assets `
- v / var / run / docker.sock: / var / run / docker.sock `
selenium / node - docker: 4.26 . 0 - 20241101
アセットをホストに保存するには、ホスト パスを/opt/selenium/assets
にマウントしてください。
グリッドの使用が完了し、コンテナーが終了したら、次のコマンドを使用してネットワークを削除できます。
# Removes the grid network
$ docker network rm grid
docker run --rm --name selenium-docker -p 4444:4444
-v ${PWD} /config.toml:/opt/selenium/config.toml
-v ${PWD} /assets:/opt/selenium/assets
-v /var/run/docker.sock:/var/run/docker.sock
selenium/standalone-docker:4.26.0-20241101
docker run --rm --name selenium-docker -p 4444:4444 `
-v ${PWD} /config.toml:/opt/selenium/config.toml `
-v ${PWD} /assets:/opt/selenium/assets `
-v /var/run/docker.sock:/var/run/docker.sock `
selenium/standalone-docker:4.26.0-20241101
$ docker run -d -p 4442-4444:4442-4444 --name selenium-hub selenium/hub:4.26.0-20241101
$ docker run -d -p 5555:5555
-e SE_EVENT_BUS_HOST= < ip-from-machine- 1>
-e SE_EVENT_BUS_PUBLISH_PORT=4442
-e SE_EVENT_BUS_SUBSCRIBE_PORT=4443
-v ${PWD} /config.toml:/opt/selenium/config.toml
-v ${PWD} /assets:/opt/selenium/assets
-v /var/run/docker.sock:/var/run/docker.sock
selenium/node-docker:4.26.0-20241101
$ docker run -d -p 5555:5555 `
-e SE_EVENT_BUS_HOST= < ip-from-machine- 1> `
-e SE_EVENT_BUS_PUBLISH_PORT=4442 `
-e SE_EVENT_BUS_SUBSCRIBE_PORT=4443 `
-v ${PWD} /config.toml:/opt/selenium/config.toml `
-v ${PWD} /assets:/opt/selenium/assets `
-v /var/run/docker.sock:/var/run/docker.sock `
selenium/node-docker:4.26.0-20241101
config.toml
ファイルの[server]
セクションに入力します。
[ docker ] # Configs have a mapping between the Docker image to use and the capabilities that need to be matched to # start a container with the given image. configs = [ " selenium/standalone-firefox:4.26.0-20241101 " , " { " browserName " : " firefox " } " , " selenium/standalone-chrome:4.26.0-20241101 " , " { " browserName " : " chrome " } " , " selenium/standalone-edge:4.26.0-20241101 " , " { " browserName " : " MicrosoftEdge " } " ] # URL for connecting to the docker daemon # Most simple approach, leave it as http://127.0.0.1:2375, and mount /var/run/docker.sock. # 127.0.0.1 is used because interally the container uses socat when /var/run/docker.sock is mounted # If var/run/docker.sock is not mounted: # Windows: make sure Docker Desktop exposes the daemon via tcp, and use http://host.docker.internal:2375. # macOS: install socat and run the following command, socat -4 TCP-LISTEN:2375,fork UNIX-CONNECT:/var/run/docker.sock, # then use http://host.docker.internal:2375. # Linux: varies from machine to machine, please mount /var/run/docker.sock. If this does not work, please create an issue. url = " http://127.0.0.1:2375 " # Docker image used for video recording video-image = " selenium/video:ffmpeg-7.1-20241101 " # Uncomment the following section if you are running the node on a separate VM # Fill out the placeholders with appropriate values [ server ] host = < ip-from-node-machine> port = < port-from-node-machine>
アセットをホストに保存するには、ホスト パスを/opt/selenium/assets
にマウントしてください。
ハブとノードを使用した例を次に示します。
docker-compose-v3-dynamic-grid.yml
コンテナーは、 SE_NODE_SESSION_TIMEOUT
やSE_OPTS
などの環境変数を使用してさらに構成できます。子コンテナが作成されると、 SE_
という接頭辞が付いたすべての環境変数が転送され、コンテナに設定されます。 standalone-docker
コンテナーまたはnode-docker
コンテナーで必要な環境変数を設定できます。次の例では、すべてのセッションのセッション タイムアウトを 700 秒に設定します。
docker run --rm --name selenium-docker -p 4444:4444
-e SE_NODE_SESSION_TIMEOUT=700
-v ${PWD} /config.toml:/opt/selenium/config.toml
-v ${PWD} /assets:/opt/selenium/assets
-v /var/run/docker.sock:/var/run/docker.sock
selenium/standalone-docker:4.26.0-20241101
docker run --rm --name selenium-docker -p 4444:4444 `
-e SE_NODE_SESSION_TIMEOUT=700 `
-v ${PWD} /config.toml:/opt/selenium/config.toml `
-v ${PWD} /assets:/opt/selenium/assets `
-v /var/run/docker.sock:/var/run/docker.sock `
selenium/standalone-docker:4.26.0-20241101
WebDriver セッションを記録するには、 true
に設定されたse:recordVideo
フィールドを追加する必要があります。タイムゾーンと画面解像度を設定することもできます。例:
{
"browserName" : " firefox " ,
"platformName" : " linux " ,
"se:recordVideo" : " true " ,
"se:timeZone" : " US/Pacific " ,
"se:screenResolution" : " 1920x1080 "
}
テストの実行後、Docker コンテナーにマウントしたパス ( ${PWD}/assets
) を確認すると、ビデオとセッション情報が表示されるはずです。
言語バインディングから、出力ビデオ ファイル名を動的に変更するse:name
機能を設定できます。たとえば、Python バインディングでは次のようになります。
from selenium . webdriver . chrome . options import Options as ChromeOptions
from selenium import webdriver
options = ChromeOptions ()
options . set_capability ( 'se:recordVideo' , True )
options . set_capability ( 'se:screenResolution' , '1920x1080' )
options . set_capability ( 'se:name' , 'test_visit_basic_auth_secured_page (ChromeTests)' )
driver = webdriver . Remote ( options = options , command_executor = "http://localhost:4444" )
driver . get ( "https://selenium.dev" )
driver . quit ()
テストの実行後、( ${PWD}/assets
) のパス/
にビデオ ファイル名が表示されます。
ファイル名が長くならないように、ファイル名は 255 文字に切り詰められます。また、 space
文字は_
に置き換えられ、ファイル名にはアルファベット、数字、 -
(ハイフン)、 _
(アンダースコア) の文字のみが残ります。 (この特技は、この PR が統合されると利用可能になります)
tzdata
ベースのイメージにインストールされ、環境変数TZ
使用してコンテナーにタイムゾーンを設定できます。デフォルトでは、タイムゾーンはUTC
に設定されています。サポートされているタイムゾーンのリストは、こちらでご覧いただけます。例えば:
$ docker run --rm --entrypoint= " " -e TZ=Asia/Ho_Chi_Minh selenium/node-chromium:latest date +%FT%T%Z
2024-08-28T18:19:26+07
これらの Docker イメージを Kubernetes にデプロイするための Helm チャートを提供します。詳細については、Helm Readme を参照してください。
ハブまたはノードを起動するための追加のコマンド ライン パラメーターを含むSE_OPTS
変数を渡すことができます。
$ docker run -d -p 4444:4444 -e SE_OPTS= " --log-level FINE " --name selenium-hub selenium/hub:4.26.0-20241101
SE_JAVA_OPTS
環境変数を Java プロセスに渡すことができます。
$ docker run -d -p 4444:4444 -e SE_JAVA_OPTS=-Xmx512m --name selenium-hub selenium/hub:4.26.0-20241101
言語バインディングからブラウザー オプションを介して引数を追加する代わりに、たとえば次のようにします。
options = ChromeOptions ()
options . add_argument ( '--incognito' )
options . add_argument ( '--disable-dev-shm-usage' )
driver = webdriver . Remote ( options = options , command_executor = "http://localhost:4444/wd/hub" )
また、(ノード、スタンドアロン、またはノード Docker) コンテナ環境変数から引数を直接適用することをプロアクティブに強制することもできます。 SE_BROWSER_ARGS_
で始まり、その後に設定キーが続く名前の環境変数を定義します (複数の引数を定義する場合は、それらが一意であることを確認してください)。例えば:
docker run -d -p 4444:4444
-e SE_BROWSER_ARGS_INCOGNITO=--incognito
-e SE_BROWSER_ARGS_DISABLE_DSHM=--disable-dev-shm-usage
selenium/standalone-chrome:latest
参照用に chromium コマンドライン引数をリストします。
注: 現在、これはノード ブラウザー Chrome/Chromium、Edge に適用されます。
ノードはイベント バスを通じて自身を登録します。グリッドが通常のハブ/ノード設定で開始されると、ハブがイベント バスとして機能します。グリッドが 5 つの要素すべてを分離して開始されると、イベント バスは独自に実行されます。
どちらの場合も、ノードが自身を登録できるように、イベント バスの場所をノードに伝える必要があります。これが、 SE_EVENT_BUS_HOST
、 SE_EVENT_BUS_PUBLISH_PORT
、およびSE_EVENT_BUS_SUBSCRIBE_PORT
環境変数の目的です。
場合によっては、たとえばノードにタグを付けたい場合、ノード構成にカスタム ステレオタイプを指定することが必要になることがあります。環境変数SE_NODE_STEREOTYPE
は、ノードのconfig.toml
にステレオタイプ エントリを設定します。 config.toml ファイルの例は、「特定のノードに一致するカスタム機能の設定」にあります。
これらの環境変数のデフォルト値の例を次に示します。
$ docker run -d
-e SE_EVENT_BUS_HOST= < event_bus_ip | event_bus_name >
-e SE_EVENT_BUS_PUBLISH_PORT=4442
-e SE_EVENT_BUS_SUBSCRIBE_PORT=4443 -e SE_NODE_STEREOTYPE= " { " browserName " : " ${SE_NODE_BROWSER_NAME} " , " browserVersion " : " ${SE_NODE_BROWSER_VERSION} " , " platformName " : " Linux " } "
--shm-size= " 2g " selenium/node-chrome:4.26.0-20241101
WebDriver をサポートするサービス エンドポイントにコマンドを中継します。 WebDriver をサポートする外部サービスを Selenium Grid に接続すると便利です。このようなサービスの例としては、クラウド プロバイダーや Appium サーバーが挙げられます。このようにして、Grid はローカルに存在しないプラットフォームやバージョンをより多くカバーできるようになります。
次に、設定リレー コマンドの例を示します。
docker-compose-v3-test-node-relay.yml
コマンドのみを中継したい場合は、 selenium/node-base
軽量で適しています。ブラウザとリレーコマンドの両方でノードを設定する場合は、それぞれのノードイメージを使用できます。
環境変数を使用してリレー構成を生成するには、 SE_NODE_RELAY_URL
およびその他の変数を以下のように設定します。
[ relay ]
url = " ${SE_NODE_RELAY_URL} "
status-endpoint = " ${SE_NODE_RELAY_STATUS_ENDPOINT} "
protocol-version = " ${SE_NODE_RELAY_PROTOCOL_VERSION} "
configs = [ ' ${SE_NODE_RELAY_MAX_SESSIONS} ' , ' {"browserName": "${SE_NODE_RELAY_BROWSER_NAME}", "platformName": "${SE_NODE_RELAY_PLATFORM_NAME}", "appium:platformVersion": "${SE_NODE_RELAY_PLATFORM_VERSION}"} ' ]
リレーされたノードでサンプル テストを実行するには、プロジェクトのクローンを作成し、以下のコマンドを試します。
make test_node_relay
デフォルトでは、Selenium はhttp://127.0.0.1:4444/
でアクセスできます。 SE_SUB_PATH
環境変数を指定することで、カスタム サブパスを使用するように Selenium を構成できます。以下の例では、Selenium はhttp://127.0.0.1:4444/selenium-grid/
でアクセス可能です。
$ docker run -d -p 4444:4444 -e SE_SUB_PATH=/selenium-grid/ --name selenium-hub selenium/hub:4.26.0-20241101
デフォルトでは、ノードは画面解像度 1920 x 1080、色深度 24 ビット、dpi 96 で開始します。これらの設定は、コンテナーの起動時にSE_SCREEN_WIDTH
、 SE_SCREEN_HEIGHT
、 SE_SCREEN_DEPTH
、および/またはSE_SCREEN_DPI
環境変数を指定することで調整できます。
docker run -d -e SE_SCREEN_WIDTH=1366 -e SE_SCREEN_HEIGHT=768 -e SE_SCREEN_DEPTH=24 -e SE_SCREEN_DPI=74 selenium/standalone-firefox:4.26.0-20241101
ユースケースによっては、たとえば BiDi/CDP エンドポイントにアクセスする場合など、グリッド URL をノードに設定する必要がある場合があります。これは、Selenium 4 に存在する新しいRemoteWebDriver.builder()
またはAugmenter()
使用する場合にも必要です (これらは BiDi/CDP 接続を暗黙的にセットアップするため)。これは、 SE_NODE_GRID_URL
環境変数 (例: -e SE_NODE_GRID_URL=http://
を使用して実行できます。セッションの実行中にライブビューを表示したい場合は、この環境変数を設定する必要があります。
グリッドのデフォルトのセッション タイムアウトは 300 秒で、セッションは強制終了されるまで古い状態になる可能性があります。 SE_NODE_SESSION_TIMEOUT
使用すると、その値を秒単位で上書きできます。
新しいセッションリクエストは処理される前にセッションキューに置かれ、登録されたノード全体で一致するスロットが見つかるまでリクエストはキュー内に留まります。ただし、スロットが見つからなかった場合、新しいセッション要求はタイムアウトになる可能性があります。デフォルトでは、リクエストはタイムアウトに達するまで最大 300 秒間キュー内に留まります。さらに、リクエストの処理は 5 秒ごとに行われます (デフォルト)。
これらの値は、ハブおよび SessionQueue の環境変数 ( SE_SESSION_REQUEST_TIMEOUT
およびSE_SESSION_RETRY_INTERVAL
) を介してオーバーライドできます。たとえば、タイムアウトが 500 秒の場合はSE_SESSION_REQUEST_TIMEOUT=500
、再試行間隔が 2 秒の場合はSE_SESSION_RETRY_INTERVAL=2
になります。
デフォルトでは、 SE_NODE_MAX_SESSIONS
環境変数を通じて、コンテナーごとに 1 つのセッションのみが実行されるように構成されています。使用可能な最大プロセッサまでその数を増やすことができます。これは、1 つのコンテナー/ブラウザーで 1 つの CPU を実行すると、より安定性が得られるためです。
ただし、パフォーマンスを測定し、それに基づいて各コンテナーでより多くのセッションを実行できると考えられる場合は、 SE_NODE_MAX_SESSIONS
目的の数に設定し、 SE_NODE_OVERRIDE_MAX_SESSIONS
true
に設定することで、最大制限をオーバーライドできます。ただし、使用可能なプロセッサーを超えるブラウザー セッションを実行すると、リソースが過負荷になるため、お勧めできません。
ビデオ録画が有効になっている場合、この設定をオーバーライドすると、複数のブラウザ セッションが同じビデオにキャプチャされる可能性があるため、望ましくない副作用が生じます。
Firefox、Chrome、ヘッドレス モードを使用する場合、Xvfb サーバーを起動する必要はありません。
サーバーの起動を回避するには、 SE_START_XVFB
環境変数をfalse
(またはtrue
以外の値) に設定します。次に例を示します。
$ docker run -d --net grid -e SE_EVENT_BUS_HOST=selenium-hub -e SE_EVENT_BUS_PUBLISH_PORT=4442
-e SE_EVENT_BUS_SUBSCRIBE_PORT=4443 -e SE_START_XVFB=false --shm-size= " 2g " selenium/node-chrome:4.26.0-20241101
詳細については、この GitHub の問題を参照してください。
注意:
--headless=new
モードで実行するにはSE_START_XVFB
true
に設定する必要があります。Docker Swarm や Kubernetes などの一部の環境では、N 個のテストが実行された後にノードまたはスタンドアロン コンテナーをシャットダウンすると便利です。たとえば、これを Kubernetes で使用してポッドを終了し、N セッション後に新しいポッドをスケールすることができます。この動作を有効にするには、環境変数SE_DRAIN_AFTER_SESSION_COUNT
をゼロより大きい値に設定します。
$ docker run -e SE_DRAIN_AFTER_SESSION_COUNT=5 --shm-size= " 2g " selenium/standalone-firefox:4.26.0-20241101
前のコマンドでは、5 つのセッションが実行された後にスタンドアロン コンテナーがシャットダウンされます。
長時間実行されるコンテナーでは、ブラウザーに残り物が残る場合があります。これらは、すでに終了したがブラウザを完全に停止できなかったジョブのブラウザ プロセス、または/tmp
ファイル システム (特に Chrome ベースのブラウザ) に書き込まれた一時ファイルのスタックである可能性があります。コンテナ内のプロセス ID やファイル システムの使用状況などのリソースがいっぱいになるのを避けるために、ノード コンテナ内で 1 時間ごとに実行される自動クリーンアップ スクリプトがあります。これにより、古いプロセスと古い一時ファイルがクリーンアップされます。デフォルトでは、これは無効になっています。有効にすると、2 時間以上実行されているブラウザと 1 日以上古いファイルがクリーンアップされます。これらは、次の環境変数を使用して有効化し、調整できます。
SE_ENABLE_BROWSER_LEFTOVERS_CLEANUP
: デフォルト値false
。クリーンアップを有効にするにはtrue
に設定します。SE_BROWSER_LEFTOVERS_INTERVAL_SECS
: デフォルト値3600
(1 時間)、クリーンアップ間隔 (秒単位)。SE_BROWSER_LEFTOVERS_PROCESSES_SECS
: デフォルト値7200
(2 時間)。この時間を超えて実行されているブラウザは強制終了されます。SE_BROWSER_LEFTOVERS_TEMPFILES_DAYS
: デフォルト値1
(1 日)。Chrome ベースのブラウザによって/tmp
に生成されたファイルは、これらの日数が経過すると削除されます (Firefox を使用する場合は無視されます)。長時間実行セッションに Selenium を使用し、ブラウザが 2 時間以上実行されることが予想される場合は、 SE_ENABLE_BROWSER_LEFTOVERS_CLEANUP
true
に設定しない (デフォルト値のfalse
のままにする) か、 SE_BROWSER_LEFTOVERS_PROCESSES_SECS
を調整して、予想される長時間よりも高い値を設定します。ブラウザプロセスを実行しています。
$ docker run -e SE_ENABLE_BROWSER_LEFTOVERS_CLEANUP=true --shm-size= " 2g " selenium/node-chrome:4.26.0-20241101
前のコマンドを使用すると、デフォルトのタイミングでクリーンアップが有効になります。
$ docker run -e SE_ENABLE_BROWSER_LEFTOVERS_CLEANUP=true
-e SE_BROWSER_LEFTOVERS_INTERVAL_SECS=7200
-e SE_BROWSER_LEFTOVERS_PROCESSES_SECS=3600
-e SE_BROWSER_LEFTOVERS_TEMPFILES_DAYS=2
--shm-size= " 2g " selenium/node-chrome:4.26.0-20241101
前のコマンドを使用すると、クリーンアップは有効になりますが、クリーンアップは (1 時間ではなく) 2 時間ごとに実行され、(2 時間ではなく) 1 時間を超えて実行されているブラウザを強制終了し、(2 時間ではなく) 2 日より古い一時ファイルを削除します。 1)。
パスワード、シークレットなどのいくつかの変数出力は、コンソール ログでマスクされます。デバッグ目的で、 SE_MASK_SECRETS
false
に設定することで無効にできます。
bash スクリプトの作成中に、構文echo "Current value is $(mask ${YOUR_VARIABLE})
を使用して出力をマスクできます。
SE_MASK_SECRETS_MIN_LENGTH
のデフォルトは3
です。これは、ブルート フォース攻撃で長さが公開されるのを避けるために、長い文字列が***
にマスクされることを意味します。
デフォルトでは、 /opt/selenium/secrets
場所にあるイメージで利用可能なデフォルトの自己署名証明書が含まれています。
server.jks
: サーバーの起動時にシステム プロパティjavax.net.ssl.trustStore
介して JVM 用に設定するトラストストア ファイル。server.pass
: ファイルには、システム プロパティjavax.net.ssl.trustStorePassword
を介した JVM のトラストストア パスワードが含まれています。tls.crt
: https 接続のサーバー証明書が Selenium オプション--https-certificate
に設定されています。tls.key
: https 接続用のサーバー秘密鍵 (PKCS8 形式) は、Selenium オプション--https-private-key
に設定されます。安全な接続を構成するための環境変数があります。
環境変数 | デフォルト | のオプション | 説明 |
---|---|---|---|
SE_ENABLE_TLS | false | デフォルト設定で安全な接続を有効にする | |
SE_JAVA_SSL_TRUST_STORE | /opt/selenium/secrets/server.jks | JVM | |
SE_JAVA_SSL_TRUST_STORE_PASSWORD | /opt/selenium/secrets/server.pass | JVM | |
SE_JAVA_DISABLE_HOSTNAME_VERIFICATION | true | JVM | コンポーネントのホストチェックを内部的に無効にする |
SE_HTTPS_CERTIFICATE | /opt/selenium/secrets/tls.crt | セレン | CLI オプション--https-certificate に設定します。 |
SE_HTTPS_PRIVATE_KEY | /opt/selenium/secrets/tls.key | セレン | CLI オプション--https-private-key に設定します |
ボリューム マウントを使用して、デフォルトの証明書を独自の証明書に置き換えることができます。
また、RemoteWebDriver の作成時に SSL ハンドシェイクに関連するエラー メッセージが表示されないように、自己署名証明書はクライアントによって信頼される必要があります (システムに広くバンドルされ信頼できる CA に追加)。
サンプルを参照してください: docker-compose-v3-full-grid-secure.yml
ブラウザーが異なれば、バインドから言語とロケールを設定する方法も異なります。
バインドから WebDriver を作成するときにプロファイル設定を設定することで、特定の言語とロケールを使用するように Firefox を構成できます。さらに、ブラウザ UI 言語を有効にするには、言語パックをアドオンとしてインストールする必要があります。たとえば、ブラウザの言語とロケールをvi-VN
に設定するには、次の手順を使用できます。
目的の言語の最新の Firefox 言語パックを入手します (例: https://download.mozilla.org/?product=firefox-langpack-latest-SSL&lang=vi)。その後、RemoteWebDriver インスタンスの作成時に言語パックをアドオンとしてインストールできます。
profile = webdriver . FirefoxProfile ()
profile . set_preference ( 'intl.accept_languages' , 'vi-VN,vi' )
profile . set_preference ( 'intl.locale.requested' , 'vi-VN,vi' )
options = FirefoxOptions ()
options . profile = profile
driver = webdriver . Remote ( options = options , command_executor = "http://selenium-hub:4444/wd/hub" )
webdriver . Firefox . install_addon ( driver , "/local/path/to/vi.xpi" )
driver . get ( 'https://google.com' )
特定の Firefox バージョンで利用可能なすべての言語パックを取得するスクリプトがあります。スクリプトを実行して言語パックをソースに取得できます。例えば:
FIREFOX_VERSION= $( docker run --rm --entrypoint= " " selenium/node-firefox:latest firefox --version | awk ' {print $3} ' )
&& ./NodeFirefox/get_lang_package.sh ${FIREFOX_VERSION} /local/path/to/download
または、コンテナ ディレクトリ/home/seluser/firefox/distribution/extensions
ホスト ディレクトリにマウントして、テスト スクリプトで使用するためにコンテナ内に事前に構築されたパックにアクセスできます。
スーパーバイザーは、コンテナー内のプロセスとログを管理するために使用されます。以下のように、環境変数を介して設定できるsupervisord
の構成の一部はあります。
環境変数 | デフォルト | supervisord 設定 |
---|---|---|
SE_SUPERVISORD_LOG_LEVEL | info | supervisord.loglevel |
SE_SUPERVISORD_CHILD_LOG_DIR | /tmp | 監視者.childlogdir |
SE_SUPERVISORD_LOG_FILE | /tmp/supervisord.log | 監視者.ログファイル |
SE_SUPERVISORD_PID_FILE | /tmp/supervisord.pid | 監視者d.pidファイル |
リポジトリのクローンを作成し、プロジェクト ディレクトリのルートから以下を実行してすべてをビルドできます。
$ VERSION=local make build
イメージ (http プロキシなど) をビルドするために環境変数を構成する必要がある場合は、docker コンテキストに渡す追加変数を含む環境変数BUILD_ARGS
設定するだけです (これは docker >= 1.9 でのみ機能します)。
$ BUILD_ARGS= " --build-arg http_proxy=http://acme:3128 --build-arg https_proxy=http://acme:3128 " make build
注: VERSION=local
を省略すると、リリースされたバージョンでイメージがビルドされますが、日付は現在のバージョンに置き換えられます。
ホスト UID/GID を使用してイメージをビルドする場合は、環境変数BUILD_ARGS
を設定するだけです。
$ BUILD_ARGS= " --build-arg UID= $( id -u ) --build-arg GID= $( id -g ) " make build
異なるデフォルトのユーザー/パスワードを使用してイメージをビルドする場合は、環境変数BUILD_ARGS
を設定するだけです。
$ BUILD_ARGS= " --build-arg SEL_USER=yourseluser --build-arg SEL_PASSWD=welcome " make build
最新の Dockerfile に基づいて (リポジトリを複製し、プロジェクト ディレクトリのルートから)、Selenium Grid とブラウザのバージョンの特定の組み合わせでイメージを構築できます。
たとえば、グリッドベースのバージョン4.17.0
、Chromeブラウザーバージョン119
120
使用して123
node-chrome
およびstandalone-chrome
画像をそれぞれ構築します。
$ ./tests/build-backward-compatible/bootstrap.sh 4.17.0 119,120,123 chrome
ジェネリックでは、スクリプトは次の引数を取ります。
$1
(必須):セレングリッドバージョン。詳細はMatrixファイルからフェッチしています$2
(必須):ブラウザのメジャーバージョン、コンマで区切られた複数の値。詳細はMatrixファイルからフェッチしています$3
(オプション):ブラウザ名。提供されていない場合、すべてのブラウザ( chrome
、 edge
、 firefox
)を反復します$4
(オプション):画像をレジストリに押します。デフォルトでは、それはfalse
です。画像をレジストリにプッシュする場合は、それをtrue
に設定します(スクリプトを実行する前に、Dockerログインが名前空間に実行される必要があります)。画像の名前空間を設定するには、スクリプトを実行する前に環境変数NAME
を設定できます。例えば:
$ export NAME=artifactory.yourcompany.com/selenium
$ ./tests/build-backward-compatible/bootstrap.sh 4.17.0 119,120,123 chrome
スクリプトを実行した後、コンベンションに続いて特定のグリッドとブラウザバージョンをピン留めするフルタグ付きのリスト画像が表示されます
Selenium Server、ブラウザー、ドライバーは、画像に事前にインストールされています。同じSeleniumバージョンに留まり、ブラウザとそのドライバーを最新のものにアップグレードするだけの場合に備えてください。以下の手順に従うことができます
リポジトリをクリックし、プロジェクトディレクトリルートから実行してアップグレードできます。
$ VERSION= $EXPECTED_SELENIUM_VERSION make chrome_upgrade_version
例: VERSION=4.16.1 make chrome_upgrade_version
新しい画像には、 YYYYMMDD
が現在の日付であるタグ$VERSION_YYYYMMDD
があります。
$ VERSION= $SELENIUM_VERSION make firefox_upgrade_version
$ VERSION= $SELENIUM_VERSION make edge_upgrade_version
MakeFileファイルの詳細コマンドを参照できます。
グリッドがアップしてリクエストを受信する準備ができているかどうかを最初に確認することをお勧めします。これは/wd/hub/status
エンドポイントをチェックすることで実行できます。
ハブと2つのノードで構成される準備ができているグリッドは、次のようになります。
{
"value" : {
"ready" : true ,
"message" : " Selenium Grid ready. " ,
"nodes" : [
{
"id" : " 6c0a2c59-7e99-469d-bbfc-313dc638797c " ,
"uri" : " http: u002fu002f 172.19.0.3:5555 " ,
"maxSessions" : 4 ,
"stereotypes" : [
{
"capabilities" : {
"browserName" : " firefox "
},
"count" : 4
}
],
"sessions" : [
]
},
{
"id" : " 26af3363-a0d8-4bd6-a854-2c7497ed64a4 " ,
"uri" : " http: u002fu002f 172.19.0.4:5555 " ,
"maxSessions" : 4 ,
"stereotypes" : [
{
"capabilities" : {
"browserName" : " chrome "
},
"count" : 4
}
],
"sessions" : [
]
}
]
}
}
"ready": true
値は、グリッドがリクエストを受信する準備ができていることを示します。このステータスは、テストを実行する前にスクリプトを介してポーリングすることも、Dockerコンテナが起動したときにHealthCheckとして追加することもできます。
画像に含まれるスクリプトCheck-Grid.shは、グリッドステータスをポーリングするために使用できます。
この例では、15秒ごとにグリッドのステータスをチェックします。チェックが完了すると30秒のタイムアウトがあり、コンテナが不健康であるとマークされるまで最大5回再取得します。ニーズに合わせて調整された値を使用してください。(必要に応じて)環境で使用されているパラメーターの--host
および--port
パラメーターを交換してください。
$ docker network create grid
$ docker run -d -p 4442-4444:4442-4444 --net grid --name selenium-hub
--health-cmd= ' /opt/bin/check-grid.sh --host 0.0.0.0 --port 4444 '
--health-interval=15s --health-timeout=30s --health-retries=5
selenium/hub:4.26.0-20241101
$ docker run -d --net grid -e SE_EVENT_BUS_HOST=selenium-hub
--shm-size= " 2g "
-e SE_EVENT_BUS_PUBLISH_PORT=4442
-e SE_EVENT_BUS_SUBSCRIBE_PORT=4443
selenium/node-chrome:4.26.0-20241101
$ docker run -d --net grid -e SE_EVENT_BUS_HOST=selenium-hub
--shm-size= " 2g "
-e SE_EVENT_BUS_PUBLISH_PORT=4442
-e SE_EVENT_BUS_SUBSCRIBE_PORT=4443
selenium/node-edge:4.26.0-20241101
$ docker run -d --net grid -e SE_EVENT_BUS_HOST=selenium-hub
--shm-size= " 2g "
-e SE_EVENT_BUS_PUBLISH_PORT=4442
-e SE_EVENT_BUS_SUBSCRIBE_PORT=4443
selenium/node-firefox:4.26.0-20241101
注: Line Delimiterは、Windowsベースの端子では動作しません。
^
またはバックティックのいずれかを試してください。
コンテナの健康状態は、 docker ps
を実行し、 (healthy)|(unhealthy)
ステータスを確認するか、次の方法で検査することで確認できます。
$ docker inspect --format= ' {{json .State.Health.Status}} ' selenium-hub
" healthy "
Dockerで知られている一般的な問題は、実行中のコンテナが常にその内部のアプリケーションの準備ができていることを意味するわけではないということです。これに取り組む簡単な方法は、「待機」スクリプトを使用することです。詳細については、こちらをご覧ください。
次のスクリプトは、BASHを使用してこれをどのように実行できるかの例ですが、テストの作成に使用されるプログラミング言語でこれを行う場合、同じ原則が適用されます。以下の例では、スクリプトは毎秒ステータスエンドポイントを投票します。グリッドが30秒以内に準備ができていない場合、スクリプトはエラーコードで終了します。
#! /bin/bash
# wait-for-grid.sh
set -e
url= " http://localhost:4444/wd/hub/status "
wait_interval_in_seconds=1
max_wait_time_in_seconds=30
end_time= $(( SECONDS + max_wait_time_in_seconds ))
time_left= $max_wait_time_in_seconds
while [ $SECONDS -lt $end_time ] ; do
response= $( curl -sL " $url " | jq -r ' .value.ready ' )
if [ -n " $response " ] && [ " $response " ] ; then
echo " Selenium Grid is up - executing tests "
break
else
echo " Waiting for the Grid. Sleeping for $wait_interval_in_seconds second(s). $time_left seconds left until timeout. "
sleep $wait_interval_in_seconds
time_left= $(( time_left - wait_interval_in_seconds ))
fi
done
if [ $SECONDS -ge $end_time ] ; then
echo " Timeout: The Grid was not started within $max_wait_time_in_seconds seconds. "
exit 1
fi
apt-get
を介してjq
がインストールされる必要があります。そうしないと、スクリプトは実行を完了せずに印刷をWaiting
続けます。
注:必要に応じて、環境の正しい値については、 localhost
と4444
交換してください。また、このスクリプトは無期限にポーリングされています。微調整してタイムアウトを確立することをお勧めします。
テストを実行する通常のコマンドはmvn clean test
であるとしましょう。上記のスクリプトを使用してテストを実行する方法は次のとおりです。
$ ./wait-for-grid.sh && mvn clean test
このように、グリッドの準備が整うまでスクリプトはポーリングし、テストが開始されます。
デフォルトでは、ベースの画像はlibnss3-tools
にインストールされ、 /home/seluser/.pki/nssdb
を初期化するため、rootlessで証明書を追加できます。カスタム証明書、CA、中級CA、またはクライアント証明書(たとえば、Enterprise Internal CA)をインストールする必要がある場合は、Seleniumノード画像から独自のDockerイメージを作成できます。 Chromiumベースのブラウザは、 nssdb
証明書ストアとして使用します。次に、このように、必要なすべての内部証明書をDockerFileにインストールできます。
画像にパッケージ化されたユーティリティスクリプトがあり、 nssdb
ストアとバンドルCAに証明書を追加するために使用できます。スクリプトは/opt/bin/add-cert-helper.sh
です。
Seleniumノードイメージをベースとして使用し、スクリプトをコンテナにコピーして実行するDockerFileを作成します。たとえば、dockerfile
さまざまな証明書とノードイメージのセットを作成する必要がある場合。ブートストラップスクリプトを作成して、ワンショットでそれを行うことができます。たとえば、bootstrap.sh
上記の例は、次のコマンドでテストできます。
make test_custom_ca_cert
# ./tests/customCACert/bootstrap.sh
詳細については、こちらをご覧ください
このようにして、証明書がインストールされ、ノードは以前のように自動的に開始されます。
別の方法として、既存のSelenium画像に証明書ファイルを追加できます。この実用的な例では、ビルド画像として使用する既知の画像があり、ローカルDockerレジストリに新しい画像を公開する方法があることを前提としています。
この例では、Redhatベースのディストリビューションをビルドイメージ(Rocky Linux)として使用していますが、選択したLinux画像になります。ビルド命令は分布によって異なることに注意してください。前の例では、ubuntuの指示を確認できます。
また、この例では、内部CAが/etc/pki/pki/ca-trust/source/anchors/your_ca.pemであることを想定しています。これは、Rocky Linuxのデフォルトの場所です。または、ホストからこれらのファイルを提供して、ビルド画像にコピーすることもできます。
ChromeおよびEdgeブラウザの場合、レシピは同じです。画像名(ノードクロームまたはノードエッジ)を調整するだけです。
# Get a standard image for creating nssdb file
FROM rockylinux:8.6 as build
RUN yum install -y nss-tools
RUN mkdir -p -m755 /seluser/.pki/nssdb
&& certutil -d sql:/seluser/.pki/nssdb -N --empty-password
&& certutil -d sql:/seluser/.pki/nssdb -A -t "C,," -n YOUR_CA -i /etc/pki/ca-trust/source/anchors/YOUR_CA.pem
&& chown -R 1200:1201 /seluser
# Start from Selenium image and add relevant files from build image
FROM selenium/node-chrome:4.26.0-20241101
USER root
COPY --from=build /seluser/ /home/seluser/
USER seluser
Firefoxの例:
# Get a standard image for working on
FROM rockylinux:8.6 as build
RUN mkdir -p "/distribution" "/certs" &&
cp /etc/pki/ca-trust/source/anchors/YOUR_CA*.pem /certs/ &&
echo '{ "policies": { "Certificates": { "Install": ["/opt/firefox-latest/YOUR_CA.pem"] }} }' >"/distribution/policies.json"
# Start from Selenium image and add relevant files from build image
FROM selenium/node-firefox:4.26.0-20241101
USER root
COPY --from=build /certs /opt/firefox-latest
COPY --from=build /distribution /opt/firefox-latest/distribution
USER seluser
このプロジェクトでは、X11VNCをVNCサーバーとして使用して、ユーザーがコンテナ内で何が起こっているかを検査できるようにします。ユーザーはこのサーバーに2つの方法で接続できます。
VNCサーバーはポート5900を聴いています。VNCクライアントを使用して接続できます。必要な無料の外部ポートにポート5900をマップしてください。
内部5900ポートは、コンテナ内で実行されているVNCサーバーの構成されたポートであるため、同じままです。 --net=host
使用する場合に備えて、 SE_VNC_PORT
環境変数でオーバーライドできます。
スタンドアロン画像の例を以下に示します。同じ概念がノード画像に適用されます。
$ docker run -d -p 4444:4444 -p 5900:5900 --shm-size= " 2g " selenium/standalone-chrome:4.26.0-20241101
$ docker run -d -p 4445:4444 -p 5901:5900 --shm-size= " 2g " selenium/standalone-edge:4.26.0-20241101
$ docker run -d -p 4446:4444 -p 5902:5900 --shm-size= " 2g " selenium/standalone-firefox:4.26.0-20241101
次に、VNCクライアントで使用します。
パスワードを要求するプロンプトが表示された場合、それはsecret
です。これを変更する場合は、環境変数SE_VNC_PASSWORD
を設定できます。
パスワード認証なしでVNCを実行する場合は、環境変数SE_VNC_NO_PASSWORD=1
を設定できます。
VNCをビューのみモードで実行する場合は、環境変数SE_VNC_VIEW_ONLY=1
を設定できます。
VNCサーバープロセスのオープンファイル記述子制限を変更する場合は、環境変数SE_VNC_ULIMIT=4096
を設定できます。
このプロジェクトでは、NOVNCを使用して、ユーザーがブラウザで視覚的にコンテナアクティビティを検査できるようにします。これは、マシンにVNCクライアントをインストールできない場合に役立つ場合があります。ポート7900はNOVNCを起動するために使用されるため、ブラウザでそのポートに接続する必要があります。
前のセクションと同様に、希望する無料の外部ポートにポート7900をマップしてください。 --net=host
使用する場合に備えて、 SE_NO_VNC_PORT
環境変数でオーバーライドすることもできます。
スタンドアロン画像の例を以下に示します。同じ概念がノード画像に適用されます。
$ docker run -d -p 4444:4444 -p 7900:7900 --shm-size= " 2g " selenium/standalone-chrome:4.26.0-20241101
$ docker run -d -p 4445:4444 -p 7901:7900 --shm-size= " 2g " selenium/standalone-edge:4.26.0-20241101
$ docker run -d -p 4446:4444 -p 7902:7900 --shm-size= " 2g " selenium/standalone-firefox:4.26.0-20241101
次に、ブラウザで使用します。
パスワードを要求するプロンプトが表示された場合、それはsecret
です。
リソースが不足している場合、または単にランニングセッションを検査する必要がない場合は、VNCをまったく実行しないことができます。 Grid StartupでSE_START_VNC=false
環境変数を設定するだけです。
Seleniumグリッドコンテナでのトレースを有効にするために、次のコマンドを実行できます。
docker network create grid
docker run -d -p 16686:16686 -p 4317:4317 --net grid --name jaeger jaegertracing/all-in-one:1.54
docker run -d -p 4442-4444:4442-4444 --net grid --name selenium-hub selenium/hub:4.26.0-20241101
docker run -d --net grid -e SE_EVENT_BUS_HOST=selenium-hub
--shm-size= " 2g "
-e SE_ENABLE_TRACING=true
-e SE_OTEL_TRACES_EXPORTER=otlp
-e SE_OTEL_EXPORTER_ENDPOINT=http://jaeger:4317
-e SE_EVENT_BUS_PUBLISH_PORT=4442
-e SE_EVENT_BUS_SUBSCRIBE_PORT=4443
selenium/node-chrome:4.26.0-20241101
docker run -d --net grid -e SE_EVENT_BUS_HOST=selenium-hub
--shm-size= " 2g "
-e SE_ENABLE_TRACING=true
-e SE_OTEL_TRACES_EXPORTER=otlp
-e SE_OTEL_EXPORTER_ENDPOINT=http://jaeger:4317
-e SE_EVENT_BUS_PUBLISH_PORT=4442
-e SE_EVENT_BUS_SUBSCRIBE_PORT=4443
selenium/node-edge:4.26.0-20241101
docker run -d --net grid -e SE_EVENT_BUS_HOST=selenium-hub
--shm-size= " 2g "
-e SE_ENABLE_TRACING=true
-e SE_OTEL_TRACES_EXPORTER=otlp
-e SE_OTEL_EXPORTER_ENDPOINT=http://jaeger:4317
-e SE_EVENT_BUS_PUBLISH_PORT=4442
-e SE_EVENT_BUS_SUBSCRIBE_PORT=4443
selenium/node-firefox:4.26.0-20241101
また、以下のDockerを参照して、YAMLファイルを構成して、単純なグリッド(または)動的グリッドを起動できるようにすることもできます。
Jaeger UIを表示して、リクエストをトレースできます。
デフォルトでは、グリッドコンポーネントでトレースが有効になっています。 Trace Exportのエンドポイントがなければ、 localhost/[0:0:0:0:0:0:0:1]:4117
などのローカルインスタンスを検索します。コンテナログでは、以下のようないくつかの行を見ることができます。
ERROR (ThrottlingLogger.dolog) Failed to export spans.
The request could not be executed. Error message: Failed to connect to localhost/[0:0:0:0:0:0:0:1]:4117
java.net.ConnectException: Failed to connect to localhost/[0:0:0:0:0:0:0:1]:4317
at okhttp3.internal.connection.RealConnection.connectSocket(RealConnection.kt:297)
at okhttp3.internal.connection. ExchangeFinder.findConnection (Exchangefinder.kt: 226)
at okhttp3.internal.connection.okhttps.internal.connection.RealConnection.connect(RealConnection.kt:207)
この場合、すべてのコンポーネントコンテナにSE_ENABLE_TRACING=false
を設定して、トレースを無効にするだけです(各コンポーネントは独自のトレースをエクスポートします)。
すべての出力がstdoutに送信されるため、実行することで検査できます。
$ docker logs -f < container-id | container-name >
環境変数をコンテナに渡すことにより、ログ出力を増やすことができます。
SE_OPTS="--log-level FINE"
--shm-size="2g"
--shm-size 2g
が必要なのはなぜですか?
これは、Dockerコンテナ内でブラウザがクラッシュするのを避けるための既知の回避策です。ここにChromeとFirefoxの文書化された問題があります。 2GBのSHMサイズは任意ですが、うまく機能することが知られています。特定のユースケースには異なる値が必要になる場合があります。ニーズに応じてこの値を調整することをお勧めします。
次のセレンの例外が表示されている場合:
Message: invalid argument: can't kill an exited process
または
Message: unknown error: Chrome failed to start: exited abnormally
または
[DriverServiceSessionFactory.apply] - Error while creating session with the driver service. Stopping driver service: java.util.concurrent.TimeoutException
その理由は、 SE_START_XVFB
環境変数をfalse
に設定したが、実際にFirefox、Chrome、またはEdgeをヘッドレスモードで実行するのを忘れてしまったからです。
一般的なシナリオは、ダウンロードされたファイルを取得するために、ブラウザコンテナにボリュームを取り付けることです。これはWindowsとMacOでうまく機能しますが、Linuxの回避策がないわけではありません。詳細については、この十分に文書化された問題を確認してください。
たとえば、Linuxを使用している間、次の方法でコンテナを開始する場合があります。
docker run -d -p 4444:4444 --shm-size= " 2g "
-v /home/ubuntu/files:/home/seluser/Downloads
selenium/standalone-chrome:4.26.0-20241101
これにより、ホスト/home/ubuntu/files
ディレクトリをコンテナ内の/home/seluser/Downloads
にマウントします(デフォルトのブラウザのダウンロードディレクトリ)。ボリュームがroot
としてマウントされるため、問題は発生します。したがって、ブラウザはユーザーseluser
の下で実行されているため、そのディレクトリにファイルを書き込むことはできません。これは、DockerがLinuxのボリュームをマウントする方法であるために発生します。この問題の詳細は詳細です。
これの回避策は、ホストにディレクトリを作成し、ボリュームを取り付ける前に権限を変更することです。ユーザーの権限に応じて、これらのコマンドのいくつかにsudo
使用する必要がある場合があります。
mkdir /home/ubuntu/files
chown 1200:1201 /home/ubuntu/files
これを行った後、マウントされたディレクトリにファイルをダウンロードできるはずです。より良い回避策がある場合は、プルリクエストを送ってください!
ダウンロードされたファイルを取得するマウントボリュームと同様。ビデオファイルの場合、同じことをする必要があるかもしれません
mkdir /tmp/videos
chown 1200:1201 /tmp/videos