- 测试
- 后端
- 云原生
- 容器编排
- 可观测性
【免费下载链接】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 仓库 CHANGELOG 归档记录(CHANGELOG/archived/4.34.0/firefox_108.md),逐行拆解一条真实的 Firefox 浏览器镜像发布日志:它记录了 Selenium Grid 4.34.0 版本(构建日期 20250727)为 Firefox 108.0.2 与 GeckoDriver 0.36.0 生成全部 20 个镜像标签的完整过程。读完本文,你将掌握 docker-selenium 浏览器镜像的版本组合规则、标签命名体系(完整版 / 短版本 / 是否携带 grid 版本号)、node-firefox 与 standalone-firefox 两种镜像的差异,以及如何根据这条日志在真实测试环境中精准拉取和固定浏览器版本。
一、发布日志全景:一条命令如何产出 20 个镜像标签
归档文档 firefox_108.md 以原始命令输出形式保留了整个发布过程,核心内容如下:
./tag_and_push_browser_images.sh 4.34.0 20250727 selenium false firefox true Tagging images for browser firefox, version 4.34.0, build date 20250727, namespace selenium Selenium Grid version -> 4.34.0-20250727 Firefox version -> 108.0.2 Short Firefox version -> 108.0 GeckoDriver version -> 0.36.0 Short GeckoDriver version -> 0.36 Tagged selenium/node-firefox:108.0.2-geckodriver-0.36.0-grid-4.34.0-20250727 Tagged selenium/standalone-firefox:108.0.2-geckodriver-0.36.0-grid-4.34.0-20250727 Tagged selenium/node-firefox:108.0.2-geckodriver-0.36.0-20250727 Tagged selenium/standalone-firefox:108.0.2-geckodriver-0.36.0-20250727 Tagged selenium/node-firefox:108.0.2-20250727 Tagged selenium/standalone-firefox:108.0.2-20250727 Tagged selenium/node-firefox:108.0-geckodriver-0.36-grid-4.34.0-20250727 Tagged selenium/standalone-firefox:108.0-geckodriver-0.36-grid-4.34.0-20250727 Tagged selenium/node-firefox:108.0-geckodriver-0.36-20250727 Tagged selenium/standalone-firefox:108.0-geckodriver-0.36-20250727 Tagged selenium/node-firefox:108.0-20250727 Tagged selenium/standalone-firefox:108.0-20250727这条日志揭示了一个关键事实:浏览器版本 108.0.2 与 GeckoDriver 0.36.0 的镜像被同时打上了 node-firefox 与 standalone-firefox 两套标签。每条标签都由三到五个版本维度拼接而成,而这一切都是由仓库根目录下的 tag_and_push_browser_images.sh 脚本自动完成的。
二、发布命令的七个参数:从源码看懂调用约定
日志第一行是可复现的完整命令。对照 tag_and_push_browser_images.sh 的入参定义,可以拆解为七个位置参数:
| 位置 | 参数示例 | 脚本变量 | 含义 |
|---|---|---|---|
| 1 | 4.34.0 | VERSION | Selenium Grid 版本号 |
| 2 | 20250727 | BUILD_DATE | 构建日期(YYYYMMDD) |
| 3 | selenium | NAMESPACE | 镜像命名空间(默认selenium) |
| 4 | false | PUSH_IMAGE | 是否推送镜像到 Registry(默认false) |
| 5 | firefox | BROWSER | 浏览器类型,脚本内 case 分支之一 |
| 6 | true | RELEASE_OLD_VERSION | 是否发布旧版本浏览器(默认false) |
| 7 | (省略) | PLATFORM | 构建平台,默认linux/amd64 |
从日志中Tagged(而非Pushed)字样可以确认本次执行时PUSH_IMAGE=false,即只打标签不上传。脚本同时支持环境变量PROMOTE_TAGS与PROMOTE_GHCR_NAMESPACE来控制"从已发布镜像补标签"与"同步镜像到 GHCR"的特殊发布路径(见 tag_and_push_browser_images.sh 中retag()函数的注释与实现)。
在 Makefile 中,这条命令由 tag_and_push_firefox_images 目标驱动,再被 tag_and_push_browser_images 聚合,与 chrome、chrome-for-testing、chromium、edge 四个浏览器一同组成完整的发布流水线。
三、版本探测:firefox 与 geckodriver 的版本号从哪里来
日志中Firefox version -> 108.0.2和GeckoDriver version -> 0.36.0并不是手工填写的,而是脚本通过docker run在已构建的node-firefox:4.34.0-20250727镜像内实际执行命令解析出来的(见 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})"其中short_version()函数(tag_and_push_browser_images.sh)按.分隔取前两段:
108.0.2→108.00.36.0→0.36
这就是日志中两组"短版本"的由来。与此同时,Makefile 的构建目标 firefox_upgrade_version 在打标签之前会对构建产物做三重冒烟验证:selenium-server.jar info --version、firefox --version、geckodriver --version,确保镜像内二进制真实可用。
这一设计保证了标签中的版本号与镜像内的实际二进制版本永远一致,不存在人为填写的偏差。
四、标签命名体系:完整版、短版本与三种组合维度
日志中列出的 10 条 node-firefox 标签(standalone-firefox 与之成对出现)共由三组维度构成:
维度一:浏览器 + 驱动 + Grid + 构建日期(最精确、可完全复现)
108.0.2-geckodriver-0.36.0-grid-4.34.0-20250727维度二:浏览器 + 驱动 + 构建日期(不含 grid 版本)
108.0.2-geckodriver-0.36.0-20250727维度三:浏览器 + 构建日期(最精简的带日期标签)
108.0.2-20250727以上三种维度再各自配一套"短版本"变体(108.0、0.36),共 6 种组合。脚本中由FIREFOX_TAGS数组统一构造(tag_and_push_browser_images.sh),随后通过循环对 node-firefox 与 standalone-firefox 成对执行retag(tag_and_push_browser_images.sh)。
4.1 为什么本次没有"裸版本标签"
细心的读者会发现日志中没有selenium/node-firefox:108.0.2、108.0、108.0-geckodriver-0.36这类不带日期的标签。这正是命令中第六个参数RELEASE_OLD_VERSION=true的效果:脚本在if [ "${RELEASE_OLD_VERSION}" = "false" ]分支内才会追加"浏览器版本 + 浏览器驱动版本""浏览器版本"等简化标签(tag_and_push_browser_images.sh)。
当 Firefox 108 已是旧版本时,发布脚本刻意只生成携带构建日期的标签,避免无日期的简化标签被使用者误当作"最新版"拉取,这是对镜像消费者的一种保护性约定。
4.2 标签层级速查
| 标签层级 | 示例 | 信息量 | 使用建议 |
|---|---|---|---|
| 浏览器.驱动.Grid.日期 | 108.0.2-geckodriver-0.36.0-grid-4.34.0-20250727 | 五维全量 | 回归复现、CI 固定版本 |
| 浏览器.驱动.日期 | 108.0.2-geckodriver-0.36.0-20250727 | 不含 Grid | 固定浏览器与驱动 |
| 浏览器.日期 | 108.0.2-20250727 | 最小带日期 | 固定浏览器版本 |
| 短版本系列 | 108.0-geckodriver-0.36-grid-4.34.0-20250727等 | 同上的主版本级 | 放宽到主版本区间 |
该命名约定在 docs/docker-hub/node-firefox.md 中有对应的文字化描述,且明确提示:latest标签适合快速体验,生产环境应使用完整标签固定浏览器与 Grid 版本。
五、node-firefox 与 standalone-firefox:两种镜像形态
日志中每条标签都同时打在node-firefox与standalone-firefox两个镜像上,二者定位不同:
- node-firefox:由 NodeFirefox/Dockerfile 构建,作为 Selenium Grid 的 Node 角色运行,需要配合 Hub 使用。其构建过程以
node-base为基础镜像,通过install-firefox-package.sh下载安装指定版本的 Firefox,再单独安装 GeckoDriver(NodeFirefox/Dockerfile),并把浏览器元信息写入/opt/selenium/browsers/firefox/(name、version、binary_location),供 Grid 配置注册时自动识别(NodeFirefox/Dockerfile)。 - standalone-firefox:由 Standalone/Dockerfile 构建,通过
--build-arg BASE=node-firefox直接复用 Node 镜像(见 Makefile),在单容器内同时运行 Grid 与 Firefox,无需外部 Hub。其启动脚本 start-selenium-standalone.sh 会以standalone模式启动 selenium-server.jar,并显式注入-Dwebdriver.gecko.driver=/usr/bin/geckodriver,保证 WebDriver 能找到正确的驱动路径。
5.1 旧版 Firefox 的安装路径:install-firefox-package.sh 的作用
Firefox 108 属于 136 以下的旧版本,此时 NodeFirefox/Dockerfile 的构建逻辑不会走 apt 安装通道,而是构造 Mozilla 官方下载地址(优先.deb,404 时回退.tar.bz2),交由 install-firefox-package.sh 完成下载与安装:.deb包走apt-get install,.tar.bz2则解压到/opt/firefox-<版本>并软链到/usr/bin/firefox。这是旧版本浏览器镜像得以长期留存的技术基础——也解释了为何归档 CHANGELOG 中会为 Firefox 108 专门保留一份发布记录。
六、如何使用这条日志对应的镜像
6.1 按完整标签拉取并固定版本
# 拉取 Node 形态(需配合 Selenium Grid Hub 使用) docker pull selenium/node-firefox:108.0.2-geckodriver-0.36.0-grid-4.34.0-20250727 # 拉取 Standalone 形态(单容器内含完整 Grid) docker pull selenium/standalone-firefox:108.0.2-geckodriver-0.36.0-grid-4.34.0-202507276.2 以 Standalone 形态启动并运行测试
参考 docs/docker-hub/node-firefox.md 的运行模式,standalone-firefox 镜像自带 Hub,可直接作为独立入口:
docker run -d -p 4444:4444 --shm-size="2g" \ selenium/standalone-firefox:108.0.2-geckodriver-0.36.0-grid-4.34.0-20250727浏览器镜像务必使用--shm-size="2g"挂载宿主机共享内存,避免浏览器进程因/dev/shm空间不足而崩溃。启动后即可将 WebDriver 测试指向http://localhost:4444;需要可视化观察容器内界面时,可访问http://localhost:7900/?autoconnect=1&resize=scale&password=secret。
6.3 以 Node 形态接入 Grid Hub
docker network create grid docker run -d -p 4442-4444:4442-4444 --net grid --name selenium-hub selenium/hub:4.34.0-20250727 docker run -d --net grid -e SE_EVENT_BUS_HOST=selenium-hub --shm-size="2g" \ selenium/node-firefox:108.0.2-geckodriver-0.36.0-grid-4.34.0-20250727Node 通过SE_EVENT_BUS_HOST指向 Hub 容器,二者在同一 Docker 网络内按容器名互相发现,即可将 Firefox 108 注册为 Grid 的一个可用插槽。
七、发布日志在 CHANGELOG 矩阵中的位置
这份 firefox_108.md 并非孤立文件,而是版本矩阵 CHANGELOG/README.md 中的一格。矩阵的动机与使用方式在文档开头有明确说明(CHANGELOG/README.md):
- 动机:在持续供应最新 Selenium Grid 核心版本的同时,允许用户为跨浏览器测试或版本固定(浏览器特定版本存在限制/问题时)选择旧浏览器版本;
- 用法:每个 ✓ 链接到对应 Grid 发布下该浏览器版本的详细变更记录,用户只需找到镜像标签、拉取镜像即可开始测试;
- 注意:项目并未对 Grid × 浏览器版本的每一种组合做全量测试,使用者需根据自身测试需求自行评估。
由于 4.34.0 已不再是当前最新 Grid 版本,该目录被归档到archived/下,矩阵中对应位置显示为archived/4.34.0/firefox_108.md的链接。归档与矩阵重建由 generate-matrix-readme.py 的archive_old_versions()与scan_changelog()逻辑自动完成——每次新版本发布后,旧的 Grid 版本目录整体移入archived/,README 矩阵同步更新。因此,当你需要"固定 Firefox 108 + GeckoDriver 0.36 + Grid 4.34"这一组合做长期回归时,本文解析的这组完整标签就是最可靠的拉取依据。
八、小结
一条看似简单的发布日志,实际上浓缩了 docker-selenium 版本管理与镜像分发的一套严谨约定:
- 版本一致性:标签中的 Firefox 与 GeckoDriver 版本号来自镜像内真实二进制的探测结果,而非人工录入;
- 多维度标签:完整版 / 短版本 × 是否含 Grid 版本 × 是否含构建日期,共 10 种排列服务于不同精度的固定需求;
- 旧版本保护:
RELEASE_OLD_VERSION=true时只发布带日期的标签,防止无日期标签被误当最新版; - 双形态分发:同一版本组合同时产出 node-firefox(配合 Grid)与 standalone-firefox(单容器完整 Grid)两种镜像。
后续在仓库中查看任意浏览器版本的归档发布记录(如 CHANGELOG/archived/4.34.0/firefox_139.md 等同目录文件)时,都可以用本文的方法论快速解读:先看命令参数,再看版本探测结果,最后对照标签命名体系定位你需要的精确镜像。
- 测试
- 后端
- 云原生
- 容器编排
- 可观测性
【免费下载链接】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 发布解读:Selenium Grid 4.31.0 配 Firefox 132.0.2 + GeckoDriver 0.36.0 镜像标签全解析
docker selenium 发布解读:Selenium Grid 4.31.0 配 Firefox 132.0.2 + GeckoDriver 0.36.0
测试后端云原生容器编排可观测性docker-selenium 镜像发布标签生成全解:以 Firefox 105.0.3 + GeckoDriver 0.36.0 + Grid 4.32.0 为例
docker selenium 镜像发布标签生成全解:以 Firefox 105.0.3 + GeckoDriver 0.36.0 + Grid 4.32.0
测试后端云原生容器编排可观测性docker-selenium 归档版本解析:Firefox 108.0.2 + GeckoDriver 0.36.0 镜像标签全解读
docker selenium 归档版本解析:Firefox 108.0.2 + GeckoDriver 0.36.0 镜像标签全解读 本文以 docker s
测试后端云原生容器编排可观测性
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考