- 测试
- 后端
- 云原生
- 容器编排
- 可观测性
【免费下载链接】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
在 docker-selenium 项目的版本发布流程中,每一个浏览器版本都会通过tag_and_push_browser_images.sh脚本生成一套完整的多维度镜像标签。本文以存档于 CHANGELOG/archived/4.31.0/firefox_119.md 的发布记录为线索,深入拆解 Selenium Grid 4.31.0 构建(构建日期 20250414)中 Firefox 119.0.1 与 GeckoDriver 0.36.0 的组合是如何被打包、打标签并推送的。读完本文,你将掌握 docker-selenium 的镜像标签命名约定、发布脚本的完整参数体系与底层执行逻辑,并能据此准确选择或复现任意浏览器版本的镜像标签。
发布记录本身说了什么
firefox_119.md本质上是一份脚本执行实录:它记录了为 Firefox 119 系列镜像打标签的完整命令与输出,核心信息如下:
- 发布版本(Grid 版本 + 构建日期):
4.31.0-20250414 - Firefox 版本:
119.0.1(短版本号119.0) - GeckoDriver 版本:
0.36.0(短版本号0.36) - 涉及镜像:
selenium/node-firefox与selenium/standalone-firefox - 推送开关:
false(仅本地打标签,不推送)
这些信息对应仓库中 tag_and_push_browser_images.sh 的 firefox 分支在 4.31.0 时代的执行结果,是理解标签命名约定的最佳实战样本。
脚本参数体系:一行命令背后的七个入参
发布记录第一行的调用方式是:
./tag_and_push_browser_images.sh 4.31.0 20250414 selenium false firefox true对照 tag_and_push_browser_images.sh 的头部定义,这 7 个位置参数分别是:
| 位置 | 参数 | 本次取值 | 含义 |
|---|---|---|---|
| 1 | VERSION | 4.31.0 | Selenium Grid 版本 |
| 2 | BUILD_DATE | 20250414 | 构建日期(YYYYMMDD) |
| 3 | NAMESPACE | selenium | 镜像命名空间(默认值) |
| 4 | PUSH_IMAGE | false | 是否执行 docker push(默认 false) |
| 5 | BROWSER | firefox | 浏览器类型,脚本按此进入对应分支 |
| 6 | RELEASE_OLD_VERSION | true | 是否为旧版本补标签(默认 false) |
| 7 | PLATFORM | (省略,默认linux/amd64) | 目标平台 |
其中TAG_VERSION=${VERSION}-${BUILD_DATE}组成了后续所有标签中反复出现的grid-4.31.0-20250414后缀。
版本信息是怎么探测出来的
脚本并未硬编码 Firefox 与 GeckoDriver 的版本号,而是通过直接运行已构建镜像内的二进制来探测(tag_and_push_browser_images.sh):
FIREFOX_VERSION=$(docker run --rm ${NAMESPACE}/node-firefox:${TAG_VERSION} firefox --version | awk '{print $3}') FIREFOX_SHORT_VERSION="$(short_version ${FIREFOX_VERSION})" GECKODRIVER_VERSION=$(docker run --rm ${NAMESPACE}/node-firefox:${TAG_VERSION} geckodriver --version | awk 'NR==1{print $2}') GECKODRIVER_SHORT_VERSION="$(short_version ${GECKODRIVER_VERSION})"关键点:
- 探测路径是"先构建、后打标":要求
selenium/node-firefox:4.31.0-20250414这个基础构建标签已经存在,脚本在其中运行firefox --version和geckodriver --version,用awk提取出版本号字段,再据此生成衍生标签。 - 短版本号由
short_version()函数截取:该函数把119.0.1按.分割后取前两段得到119.0(tag_and_push_browser_images.sh),所以发布记录中同时出现了119.0.1与119.0两套标签组。 - Firefox 版本探测使用
$3字段,与 generate_release_notes.sh 中生成发布说明的方式完全一致,两处相互印证。
标签组的构成:同一镜像的十种拉取方式
发布记录展示的标签可以归纳为两大组(每组 5 个标签、node 与 standalone 各一套):
完整版本号组(基于 119.0.1 / 0.36.0)
119.0.1-geckodriver-0.36.0-grid-4.31.0-20250414119.0.1-geckodriver-0.36.0-20250414119.0.1-20250414119.0.1-geckodriver-0.36.0(由 RELEASE_OLD_VERSION=true 追加)119.0.1(由 RELEASE_OLD_VERSION=true 追加)
短版本号组(基于 119.0 / 0.36)
119.0-geckodriver-0.36-grid-4.31.0-20250414119.0-geckodriver-0.36-20250414119.0-20250414119.0-geckodriver-0.36(由 RELEASE_OLD_VERSION=true 追加)119.0(由 RELEASE_OLD_VERSION=true 追加)
从 tag_and_push_browser_images.sh 的数组定义看,标签的构造遵循固定的三段式语义:
- 浏览器维度:Firefox 版本号(长/短);
- 驱动维度:
geckodriver-<版本>(长/短,可选组合); - Grid 维度:
grid-<Grid版本>-<构建日期>(可选组合)。
RELEASE_OLD_VERSION参数决定是否追加"去掉构建日期"的纯版本标签。本次调用传入true,因此119.0.1-geckodriver-0.36.0、119.0.1、119.0-geckodriver-0.36、119.0四个短链标签也被生成,方便用户用最简标签拉取该构建。
retag()函数负责实际的打标与推送逻辑(tag_and_push_browser_images.sh):在PUSH_IMAGE=false时仅执行docker tag,为镜像赋予别名而不复制数据;当PUSH_IMAGE=true时则逐标签执行docker push。
标签约定的使用视角:用户该如何选择
结合 docs/docker-hub/node-firefox.md 对标签约定的说明,本次发布记录实际呈现了官方推荐的完整标签层级。以 Firefox 119.0.1、GeckoDriver 0.36.0、Grid 4.31.0、构建日期 20250414 为例,用户可按需选择:
- 只需固定浏览器大版本:
selenium/node-firefox:119.0 - 需要精确到浏览器补丁版本:
selenium/node-firefox:119.0.1 - 同时固定浏览器与驱动:
selenium/node-firefox:119.0.1-geckodriver-0.36.0 - 全量锁定(浏览器 + 驱动 + Grid + 构建日期):
selenium/node-firefox:119.0.1-geckodriver-0.36.0-grid-4.31.0-20250414
selenium/standalone-firefox的标签集合同理。这样的设计让用户可以像使用版本矩阵一样精确锁定测试环境:既可以在跨浏览器测试中快速切换到最新构建,也可以在遇到特定浏览器版本兼容问题时精确回退。
从发布记录反推构建端:Firefox 119 在镜像内如何落地
发布记录中的版本号并非随意组合,其来源可以追溯到 NodeFirefox/Dockerfile 的构建逻辑:
- Firefox 安装:构建阶段通过
FIREFOX_VERSION构建参数指定浏览器版本,amd64 平台下直接解析 Mozilla 官方下载地址(deb 或 tar.bz2),由 install-firefox-package.sh 完成下载与安装;安装完成后通过firefox --version | awk '{print $3}'把版本号写入/opt/selenium/browsers/firefox/version,供 Grid 节点上报浏览器信息(NodeFirefox/Dockerfile)。 - GeckoDriver 安装:
GECKODRIVER_VERSION构建参数默认为latest,此时会先解析 mozilla/geckodriver 仓库的最新 release 标签,再按架构(linux64 / linux-aarch64)下载对应压缩包解压到/opt,最终以符号链接形式暴露为/usr/bin/geckodriver(NodeFirefox/Dockerfile)。本次发布记录的0.36.0就是该解析流程在 4.31.0 构建时得到的实际版本。 - 运行时观测:用户拿到镜像后也可自行执行
docker run --rm selenium/node-firefox:119.0.1-geckodriver-0.36.0-grid-4.31.0-20250414 geckodriver --version来复核镜像内的驱动版本,这与发布脚本的探测手段完全一致。
发布记录在仓库中的定位:版本矩阵的一格
firefox_119.md属于 CHANGELOG/archived/4.31.0 存档目录。按照 CHANGELOG/README.md 的说明,CHANGELOG 维护着一张"Selenium Grid 版本 × 浏览器版本"的矩阵表,每个 ✓ 都链接到对应 Grid 发布下某个具体浏览器版本的详细变更记录,最新的 Grid 版本位于 CHANGELOG/4.48.0,历史版本则归档到 archived 目录。
对比同版本的其他浏览器记录(如 CHANGELOG/archived/4.31.0/edge_119.md)可以看出,这套标签机制对所有浏览器(chrome、chromium、edge、firefox、chrome-for-testing)是统一的:edge 记录中 Edge 119.0.2151.97 与 EdgeDriver 119.0.2151.97 遵循完全相同的"浏览器-驱动-grid-日期"四段式命名。而 Firefox 119 这条记录的特性在于驱动与浏览器版本号并不一致(119.0.1 vs 0.36.0),恰好说明了"驱动版本独立解析、独立参与标签命名"的设计。
此外,CHANGELOG/4.48.0/firefox_119.md 显示同样的 Firefox 119.0.1 在 4.48.0 构建中搭配的已是 GeckoDriver 0.37.1,这印证了一个重要事实:同一浏览器版本会随 Grid 发布迭代而更换驱动版本,因此标签中的 geckodriver 字段对精确复现测试环境至关重要。
如何在实际项目中使用这些标签
在 compose 编排中使用固定标签,例如 docker-compose-v3.yml 中节点镜像的写法,只需将latest替换为发布记录中的全量标签即可:
services: firefox: image: selenium/node-firefox:119.0.1-geckodriver-0.36.0-grid-4.31.0-20250414 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若使用裸docker run启动 Node,则对应 docs/docker-hub/node-firefox.md 的写法:
docker run -d --net grid -e SE_EVENT_BUS_HOST=selenium-hub \ --shm-size="2g" \ selenium/node-firefox:119.0.1-geckodriver-0.36.0-grid-4.31.0-20250414几点实践建议:
- 生产与回归环境优先使用全量标签(含
grid-与日期),确保浏览器、驱动、Grid 与构建产物完全一致; - 需要跟随浏览器小版本修复时,可用短版本标签如
119.0平衡稳定性与更新频率; - 由于仓库明确说明并未对每个 Grid 与浏览器版本的组合做全量测试(CHANGELOG/README.md),切换到非默认组合前应结合自身测试需求评估。
小结
firefox_119.md表面上只是一段打标日志,实则完整呈现了 docker-selenium 发布流水线的核心环节:镜像先以4.31.0-20250414构建标签产出,脚本再通过运行时探测 Firefox 119.0.1 与 GeckoDriver 0.36.0 的精确版本,按"浏览器版本 / 浏览器+驱动版本 / 浏览器+驱动+Grid 版本 / 短版本号"四个维度生成十种等价标签,分别指向 node 与 standalone 两种镜像形态。理解这条标签生成链路后,无论是挑选现成镜像还是自行维护浏览器版本组合,都能快速定位到正确的镜像标签。
- 测试
- 后端
- 云原生
- 容器编排
- 可观测性
【免费下载链接】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
相关推荐
docker-selenium 4.29.0 Firefox 125 版本发布全解析:镜像标签生成机制与 GeckoDriver 版本对齐实战
docker selenium 4.29.0 Firefox 125 版本发布全解析:镜像标签生成机制与 GeckoDriver 版本对齐实战 导读 本文基于
测试后端云原生容器编排可观测性Docker Selenium 4.31.0 的 Firefox 111.0.1 镜像标签发布机制详解:tag_and_push_browser_images.sh 实战解读
Docker Selenium 4.31.0 的 Firefox 111.0.1 镜像标签发布机制详解:tag_and_push_browser_images.
测试后端云原生容器编排可观测性docker-selenium 4.48.0 版本发布记录解读:Firefox 127.0.2 + GeckoDriver 0.37.1 镜像标签全解析
docker selenium 4.48.0 版本发布记录解读:Firefox 127.0.2 + GeckoDriver 0.37.1 镜像标签全解析 导读
测试后端云原生容器编排可观测性
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考