首页
/ SeleniumHQ/docker-selenium项目中的docker-compose-v3.yml文件解析与使用指南

SeleniumHQ/docker-selenium项目中的docker-compose-v3.yml文件解析与使用指南

2025-07-07 01:45:55作者:温艾琴Wonderful

概述

本文将深入解析SeleniumHQ/docker-selenium项目中的docker-compose-v3.yml文件,帮助读者理解如何通过Docker Compose快速部署Selenium Grid分布式测试环境。这个配置文件定义了一个完整的Selenium Grid架构,包含Hub节点和多个浏览器节点(Chrome、Edge、Firefox)。

文件结构解析

1. 服务定义

该docker-compose文件定义了四个服务:

  1. selenium-hub:Selenium Grid的中心枢纽,负责接收测试请求并分发到合适的节点
  2. chrome:Chrome浏览器节点
  3. edge:Edge浏览器节点
  4. firefox:Firefox浏览器节点

2. Hub服务配置

selenium-hub:
  image: selenium/hub:4.34.0-20250707
  container_name: selenium-hub
  ports:
    - "4442:4442"
    - "4443:4443"
    - "4444:4444"

关键配置说明:

  • 使用特定版本的selenium/hub镜像(4.34.0-20250707)
  • 显式指定容器名称为"selenium-hub"
  • 暴露三个端口:
    • 4442:用于Grid内部通信
    • 4443:HTTPS访问端口
    • 4444:标准HTTP访问端口(最常用)

3. 浏览器节点配置

所有浏览器节点配置有相似的结构,以Chrome节点为例:

chrome:
  image: selenium/node-chrome:4.34.0-20250707
  platform: linux/amd64
  shm_size: 2gb
  depends_on:
    - selenium-hub
  environment:
    - SE_EVENT_BUS_HOST=selenium-hub

共同特点:

  • 使用对应浏览器的node镜像(相同版本4.34.0-20250707)
  • 设置共享内存(shm_size)为2GB,这对浏览器运行很重要
  • 依赖selenium-hub服务(depends_on)
  • 通过环境变量SE_EVENT_BUS_HOST指定Hub主机

特殊说明:

  • Chrome和Edge节点明确指定了平台为linux/amd64
  • Firefox节点没有指定平台,将使用Docker默认平台

部署与使用指南

1. 启动服务

执行以下命令启动整个Selenium Grid环境:

docker compose -f docker-compose-v3.yml up

如需后台运行,添加-d参数:

docker compose -f docker-compose-v3.yml up -d

2. 停止服务

停止运行并清理容器:

docker compose -f docker-compose-v3.yml down

3. 验证部署

访问以下URL验证Hub是否正常运行:

http://localhost:4444

应该能看到Selenium Grid的控制台页面,显示已注册的浏览器节点。

高级配置建议

  1. 版本管理:建议固定镜像版本(如示例中的4.34.0-20250707),避免自动更新导致兼容性问题

  2. 资源限制:可根据测试需求调整shm_size,复杂测试场景可能需要更大共享内存

  3. 节点扩展:可以复制浏览器节点配置来增加并行测试能力

  4. 平台适配:在多架构环境中,明确指定platform可避免兼容性问题

常见问题解决

  1. 端口冲突:如果4442-4444端口被占用,可修改ports映射,如"4544:4444"

  2. 节点注册失败:检查SE_EVENT_BUS_HOST环境变量是否正确指向hub服务

  3. 浏览器崩溃:尝试增加shm_size值,特别是运行复杂测试时

  4. 版本不匹配:确保所有服务(hub和nodes)使用相同版本的镜像

总结

通过这个docker-compose-v3.yml文件,我们可以快速部署一个完整的Selenium Grid环境,支持多种浏览器并行测试。理解每个配置项的作用有助于根据实际需求进行调整和扩展。这种容器化部署方式大大简化了Selenium Grid的搭建和维护工作,是现代化测试基础设施的重要组成部分。