- 测试
- 后端
- 云原生
- 容器编排
- 可观测性
【免费下载链接】docker-selenium
Provides a simple way to run Selenium Grid with Chrome, Firefox, and Edge using Container Platform, making it easier to perform browser automation at scale
Selenium Grid 4.35.0 版本同时为 Chrome 113 发布了selenium/node-chrome与selenium/standalone-chrome共 12 个标签,本篇文章以 CHANGELOG/archived/4.35.0/chrome_113.md 这份归档变更记录为骨架,完整拆解每条标签的命名含义、背后脚本的版本探测与打标签流程,并结合仓库内的 Dockerfile、Makefile 与 docker-compose 配置给出"如何固定浏览器版本跑测试"的可复制方案。读完你将能读懂 Selenium Grid 浏览器镜像的整套 Tagging Convention,并能按需挑选最合适的标签拉取镜像。
这份 Changelog 记录了什么
归档在CHANGELOG/archived/下的chrome_113.md是一份构建产物级的发布日志:它不是人工撰写的说明,而是脚本 tag_and_push_browser_images.sh 的真实执行输出。原文如下(完整保留):
./tag_and_push_browser_images.sh 4.35.0 20250909 selenium false chrome true Tagging images for browser chrome, version 4.35.0, build date 20250909, namespace selenium Selenium Grid version -> 4.35.0-20250909 Chrome version -> 113.0.5672.126 Short Chrome version -> 113.0 ChromeDriver version -> 113.0.5672.63 Short ChromeDriver version -> 113.0 Tagged selenium/node-chrome:113.0.5672.126-chromedriver-113.0.5672.63-grid-4.35.0-20250909 Tagged selenium/standalone-chrome:113.0.5672.126-chromedriver-113.0.5672.63-grid-4.35.0-20250909 Tagged selenium/node-chrome:113.0.5672.126-chromedriver-113.0.5672.63-20250909 Tagged selenium/standalone-chrome:113.0.5672.126-chromedriver-113.0.5672.63-20250909 Tagged selenium/node-chrome:113.0.5672.126-20250909 Tagged selenium/standalone-chrome:113.0.5672.126-20250909 Tagged selenium/node-chrome:113.0-chromedriver-113.0-grid-4.35.0-20250909 Tagged selenium/standalone-chrome:113.0-chromedriver-113.0-grid-4.35.0-20250909 Tagged selenium/node-chrome:113.0-chromedriver-113.0-20250909 Tagged selenium/standalone-chrome:113.0-chromedriver-113.0-20250909 Tagged selenium/node-chrome:113.0-20250909 Tagged selenium/standalone-chrome:113.0-20250909从这段输出可以提炼出四个关键事实:
- 镜像组合:每次发布同时为 Node(加入 Grid 的浏览器节点)与 Standalone(内置完整 Grid 的独立容器)两个镜像形态打标签;
- 版本三元组:Selenium Grid
4.35.0-20250909、Chrome113.0.5672.126、ChromeDriver113.0.5672.63; - 长短两种精度:Chrome/ChromeDriver 同时保留
主.次.修订的完整版本号与主.次的短版本号(由 short_version 函数 截取前两段得到); - 发布方式:本次为
RELEASE_OLD_VERSION=true(最后一个参数true),因此只打带日期后缀的 6 类标签,未追加不带日期的旧式标签。
入口脚本:参数与执行流程
所有浏览器镜像标签都由 tag_and_push_browser_images.sh 统一生成,Makefile 通过 tag_and_push_chrome_images 等目标间接调用它:
tag_and_push_chrome_images: ./tag_and_push_browser_images.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) $(PUSH_IMAGE) chrome $(RELEASE_OLD_VERSION)脚本共接收 7 个位置参数,其中后 3 个有默认值:
| 位置 | 变量 | 含义 | 本次调用值 |
|---|---|---|---|
| $1 | VERSION | Selenium Grid 版本号 | 4.35.0 |
| $2 | BUILD_DATE | 构建日期(YYYYMMDD) | 20250909 |
| $3 | NAMESPACE | 镜像命名空间,默认selenium | selenium |
| $4 | PUSH_IMAGE | 是否docker push,默认false | false |
| $5 | BROWSER | 浏览器分支:chrome / chromium / edge / firefox / chrome-for-testing | chrome |
| $6 | RELEASE_OLD_VERSION | 是否追加无日期旧式标签,默认false | true |
| $7 | PLATFORM | 探测版本时指定的平台,默认linux/amd64 | 未传,用默认值 |
脚本执行分为两大阶段。
阶段一:从已构建镜像内探测真实版本
打标签前,脚本会以--platform指定的架构临时运行刚构建的selenium/node-chrome:4.35.0-20250909,用容器内二进制自身输出版本号(tag_and_push_browser_images.sh#L63-L73):
CHROME_VERSION=$(docker run --platform ${PLATFORM} --rm ${NAMESPACE}/node-chrome:${TAG_VERSION} google-chrome --version | awk '{print $3}') CHROMEDRIVER_VERSION=$(docker run --platform ${PLATFORM} --rm ${NAMESPACE}/node-chrome:${TAG_VERSION} chromedriver --version | awk '{print $2}')google-chrome --version输出Google Chrome 113.0.5672.126,取第 3 列得到113.0.5672.126;chromedriver --version输出ChromeDriver 113.0.5672.63 ...,取第 2 列得到113.0.5672.63;- 随后 short_version 按
.切分取前两段,得到113.0作为短版本。
版本号来自容器内实际二进制而非外部假设,保证了标签与镜像内容严格一致。这一点与 NodeChrome/Dockerfile 中把google-chrome --version探测结果写入/opt/selenium/browsers/chrome/version的机制同源:标签、浏览器元数据、运行时探测三者指向同一份事实。
阶段二:按模板生成标签并执行 retag
retag()(tag_and_push_browser_images.sh#L31-L51)负责实际打标签:默认执行docker tag(本地别名),仅在PUSH_IMAGE=true时追加docker push;若启用PROMOTE_TAGS=true,则改为用docker buildx imagetools create在 registry 间直接复制 manifest,从而保留多架构索引。
标签命名规则解码
本次 changelog 的 12 行输出,本质是 6 种模板 × 2 个镜像。以完整版本号为例,一条标签被-分隔为最多 4 个语义段:
113.0.5672.126 - chromedriver-113.0.5672.63 - grid-4.35.0-20250909 │ 浏览器版本 │ 浏览器驱动版本 │ Grid 版本-构建日期| 模板(长版本) | 模板(短版本) | 语义粒度 |
|---|---|---|
{Chrome}-chromedriver-{Driver}-grid-{Grid}-{Date} | 113.0-chromedriver-113.0-grid-4.35.0-20250909 | 浏览器 + 驱动 + Grid + 日期,信息最全 |
{Chrome}-chromedriver-{Driver}-{Date} | 113.0-chromedriver-113.0-20250909 | 浏览器 + 驱动 + 日期 |
{Chrome}-{Date} | 113.0-20250909 | 仅浏览器 + 日期 |
长短版本各对应 3 类,共 6 类。脚本把这 6 类定义为基础标签(tag_and_push_browser_images.sh#L75-L87),并对node-chrome与standalone-chrome各打一遍,于是产出 12 条Tagged日志。
RELEASE_OLD_VERSION 开关:追加 4 个"无日期"旧式标签
当RELEASE_OLD_VERSION=false(新版本发布时的默认行为)时,脚本还会额外追加 4 个不带构建日期的标签(tag_and_push_browser_images.sh#L88-L99),保持与历史版本标签体系兼容:
{Chrome}-chromedriver-{Driver}{Chrome}{ChromeShort}-chromedriver-{DriverShort}{ChromeShort}
本次 changelog 调用传入的是true,因此输出中只出现带grid-或日期后缀的标签——这也解释了为何归档里恰好是 12 行而非 20 行。docs 目录下的 Standalone Chrome 文档 以<Major>.<Minor>.<Patch>、<Major>.<Minor>等形式列出了同一套约定,可交叉印证。
实战:用固定标签拉起 Chrome 113 测试环境
场景一:Standalone 独立跑测试
不依赖 Hub,直接运行一个自带 Grid 的 Chrome 容器。以下命令把固定版本标签替换进官方推荐的运行方式(docs/docker-hub/standalone-chrome.md):
docker run -d -p 4444:4444 -p 7900:7900 --shm-size="2g" \ selenium/standalone-chrome:113.0.5672.126-chromedriver-113.0.5672.63-grid-4.35.0-20250909随后把 WebDriver 测试指向http://localhost:4444即可。需要观察容器内浏览器行为时,访问http://localhost:7900/?autoconnect=1&resize=scale&password=secret的 noVNC 页面。官方文档特别强调:凡是包含浏览器的镜像,docker run务必带--shm-size=2g,否则浏览器进程可能因/dev/shm空间不足而崩溃。
场景二:作为 Node 加入完整 Grid
在 docker-compose-v3.yml 中,Chrome 节点通过SE_EVENT_BUS_HOST连接到selenium-hub。把image替换为本 changelog 中的固定标签即可实现版本锁定:
services: chrome: image: selenium/node-chrome:113.0.5672.126-chromedriver-113.0.5672.63-grid-4.35.0-20250909 platform: linux/amd64 shm_size: 2gb depends_on: - selenium-hub environment: - SE_EVENT_BUS_HOST=selenium-hub selenium-hub: image: selenium/hub:4.35.0-20250909 container_name: selenium-hub ports: - "4442:4442" - "4443:4443" - "4444:4444"启动命令为docker compose -f docker-compose-v3.yml up -d,测试请求统一发往 Hub 的4444端口,由 Router/Distributor 把会话调度到 Chrome 节点上。
如何挑选标签
- 追求可复现:选含
grid-的完整标签(浏览器 + 驱动 + Grid + 日期全锁定),例如113.0.5672.126-chromedriver-113.0.5672.63-grid-4.35.0-20250909; - 只关心浏览器版本:
113.0.5672.126-20250909或113.0-20250909; - 日常开发:官方仍推荐
latest简化使用,但文档明确建议用完整标签固定浏览器与 Grid 版本,避免上游升级带来的不确定性。
从 Changelog 到版本矩阵:归档机制的源码印证
这份chrome_113.md并非孤立文件,它是整个"版本矩阵"体系的叶子节点。仓库根目录的 CHANGELOG/README.md 用一张"Grid 版本 × 浏览器版本"矩阵展示所有可用镜像,其中4.35.0行的 Chrome 列就链接到本文件(归档路径archived/4.35.0/chrome_113.md)。该 README 由 CHANGELOG/generate-matrix-readme.py 自动生成,其维护流程包含三个步骤(generate-matrix-readme.py#L189-L208):
- 归档:
archive_old_versions()将除最新版外的 Grid 版本目录整体移入archived/(generate-matrix-readme.py#L8-L42); - 扫描:
scan_changelog()用正则([\w-]+)_(\d+)\.md解析每个目录下的chrome_113.md这类文件名,得到(grid_version, browser, version)三元组; - 生成:按浏览器分组渲染矩阵表,最新版本在前、归档版本在后,每个 ✓ 指向对应 changelog 文件。
整个链路(发布脚本打标签 → 变更日志落盘 → 矩阵 README 汇总 → 归档)在仓库中闭环,Makefile 的 update_browser_versions_matrix 目标即是上述生成流程的自动化入口。
注意事项:版本组合的测试边界
矩阵 README 的官方说明明确两点,使用时应作为前提:
- 该矩阵旨在"用最新 Grid 核心 + 用户可自由钉住的浏览器版本"支撑跨浏览器测试、或因特定浏览器版本的兼容问题而锁版(CHANGELOG/README.md#L5);
- 并非每种 Grid × 浏览器组合都经过完整测试,项目方不保证任意组合完全可用,用户需要依据自身测试需求评估并自行决策(CHANGELOG/README.md#L9)。
这也正是"固定标签"的实用价值所在:当某个浏览器版本出现兼容性回归或团队尚未完成升级适配时,通过113.0.5672.126-chromedriver-113.0.5672.63-grid-4.35.0-20250909这类精确标签,可以在一行命令内把测试环境锁定在已知版本组合上,同时继续享受新 Grid 版本的功能更新。
- 测试
- 后端
- 云原生
- 容器编排
- 可观测性
【免费下载链接】docker-selenium
Provides a simple way to run Selenium Grid with Chrome, Firefox, and Edge using Container Platform, making it easier to perform browser automation at scale
相关推荐
Selenium Grid 4.48.0 Chrome 113 镜像标签全解析:tag_and_push_browser_images.sh 打标签流程与镜像选用实践
Selenium Grid 4.48.0 Chrome 113 镜像标签全解析:tag_and_push_browser_images.sh 打标签流程与镜像选
测试后端云原生容器编排可观测性Selenium Grid 4.48.0 的 Edge 118 镜像发布全解:`tag_and_push_browser_images.sh` 标签体系与版本固定实战
Selenium Grid 4.48.0 的 Edge 118 镜像发布全解: tag_and_push_browser_images.sh 标签体系与版本固定
测试后端云原生容器编排可观测性docker-selenium 4.31.0 Firefox 113 发布镜像标签全解析:tag_and_push_browser_images.sh 的标签体系与实战使用
docker selenium 4.31.0 Firefox 113 发布镜像标签全解析:tag_and_push_browser_images.sh 的标签体
测试后端云原生容器编排可观测性
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考