- 测试
- 后端
- 云原生
- 容器编排
- 可观测性
【免费下载链接】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 的 docker-selenium 项目为每个 Grid 版本同时发布多套浏览器镜像,而 CHANGELOG/4.48.0/firefox_99.md 正是 Firefox 99.0.1 随 Grid 4.48.0 发布时的完整打标签记录。本文以这份变更日志为骨架,结合 tag_and_push_browser_images.sh、NodeFirefox/Dockerfile 与 docs/docker-hub/node-firefox.md 等仓库源码,逐行拆解镜像打标签命令的每个参数、版本探测机制、标签命名规范及其底层实现。读完你将能读懂任何一份浏览器变更日志,并掌握如何在生产环境中精确选取和验证对应的 Firefox 镜像标签。
这份变更日志记录了什么
firefox_99.md全文是一段发布脚本的标准输出,记录了一次针对Firefox 99.0.1的镜像打标签过程。核心事实包括:
- 目标 Grid 版本:4.48.0,构建日期20260909,即完整 Grid 标签
4.48.0-20260909; - 浏览器版本:Firefox 99.0.1(短版本
99.0); - 驱动版本:GeckoDriver 0.37.1(短版本
0.37); - 涉及镜像:
selenium/node-firefox与selenium/standalone-firefox两套镜像,共打出 12 个标签(6 种标签 × 2 个镜像)。
在 CHANGELOG/README.md 的 "Selenium Grid x Browser Version Matrix" 矩阵中,Grid 4.48.0 行、Firefox 99 列上的 ✓ 即链接到这份文档。该矩阵的存在动机正如其 README 所述:既要跟进最新 Grid 核心版本,又要保留按浏览器版本精确锁定镜像的能力——用户找到标签、拉取镜像、直接开始测试。
打标签命令逐参数拆解
变更日志第一行是完整调用:
./tag_and_push_browser_images.sh 4.48.0 20260909 selenium false firefox true对照 tag_and_push_browser_images.sh 开头的参数定义,这 6 个位置参数的含义分别是:
| 位置 | 值 | 脚本变量 | 含义 |
|---|---|---|---|
| $1 | 4.48.0 | VERSION | Selenium Grid 版本 |
| $2 | 20260909 | BUILD_DATE | 构建日期,与 VERSION 拼接为TAG_VERSION=4.48.0-20260909 |
| $3 | selenium | NAMESPACE | 镜像命名空间(Docker Hub 账号) |
| $4 | false | PUSH_IMAGE | 是否同时推送镜像,本次仅本地打标签 |
| $5 | firefox | BROWSER | 浏览器类型,进入case分支分发 |
| $6 | true | RELEASE_OLD_VERSION | 是否为旧版本浏览器执行发布,直接影响标签集合 |
脚本随后打印Tagging images for browser firefox, version 4.48.0, build date 20260909, namespace selenium,与日志第二行完全吻合。在生产环境,这套调用也可以经由 Makefile 的tag_and_push_firefox_images目标间接触发,其默认参数由 Makefile 顶部变量提供(PUSH_IMAGE=false、RELEASE_OLD_VERSION=false),并通过tag_and_push_browser_images聚合目标统一编排。
版本探测:版本号从哪里来
日志的第三到第八行是版本探测输出,其逻辑位于脚本的 firefox 分支(tag_and_push_browser_images.sh):
FIREFOX_VERSION=$(docker run --rm ${NAMESPACE}/node-firefox:${TAG_VERSION} firefox --version | awk '{print $3}') GECKODRIVER_VERSION=$(docker run --rm ${NAMESPACE}/node-firefox:${TAG_VERSION} geckodriver --version | awk 'NR==1{print $2}')即:临时启动刚构建好的node-firefox:4.48.0-20260909镜像,在容器内执行firefox --version与geckodriver --version,再用 awk 截取版本字段。这是"以镜像内部实际软件版本为准"的探测方式,而不是信任构建参数,保证标签与实际二进制完全一致——这正是日志中Firefox version -> 99.0.1、GeckoDriver version -> 0.37.1的来源。
随后调用short_version()(tag_and_push_browser_images.sh)取前两段:
99.0.1 -> 99.0 0.37.1 -> 0.37短版本用于生成简化标签。Chrome 分支还额外支持--platform参数指定探测架构(chrome 分支通过docker run --platform ${PLATFORM}),而 firefox 分支未使用该参数,说明其版本探测不区分平台。
六种标签与两套镜像的完整矩阵
日志第 9-20 行共 12 个Tagged输出。retag()函数(tag_and_push_browser_images.sh)会对node-firefox和standalone-firefox各执行一次打标签,因此 6 种标签 × 2 个镜像 = 12 行。6 种标签模式如下:
| 序号 | 标签模式 | 示例(node-firefox) |
|---|---|---|
| 1 | 浏览器完整版-驱动完整版-grid-完整Grid标签 | 99.0.1-geckodriver-0.37.1-grid-4.48.0-20260909 |
| 2 | 浏览器完整版-驱动完整版-构建日期 | 99.0.1-geckodriver-0.37.1-20260909 |
| 3 | 浏览器完整版-构建日期 | 99.0.1-20260909 |
| 4 | 浏览器短版-驱动短版-grid-完整Grid标签 | 99.0-geckodriver-0.37-grid-4.48.0-20260909 |
| 5 | 浏览器短版-驱动短版-构建日期 | 99.0-geckodriver-0.37-20260909 |
| 6 | 浏览器短版-构建日期 | 99.0-20260909 |
这与 docs/docker-hub/node-firefox.md 中"如何选择正确标签"一节描述的约定完全一致:selenium/node-firefox-<browserVersion>-<browserDriver>-<browserDriverVersion>-<Major>.<Minor>.<Patch>-<YYYYMMDD>及其全部排列组合。
注意:日志只有 6 种标签而不是脚本注释里暗示的全部 10 种。原因在于第 6 个参数RELEASE_OLD_VERSION=true——当它为false时,脚本才会额外追加 4 个不带构建日期的通用标签(99.0.1-geckodriver-0.37.1、99.0.1、99.0-geckodriver-0.37、99.0)。本次对 Firefox 99 这一较旧浏览器版本执行发布时该参数为true,因此跳过了这 4 个通用标签,避免旧版本浏览器以通用标签形式长期驻留。
底层实现:Firefox 99 与 GeckoDriver 0.37.1 如何进入镜像
标签背后的版本由 NodeFirefox/Dockerfile 的构建逻辑决定,它也是tag_and_push_browser_images.sh所探测镜像的构建来源:
Firefox 安装(NodeFirefox/Dockerfile):构建参数FIREFOX_VERSION决定安装方式。对于 99 这种小于 136 的版本,会走 package 下载路径,由 install-firefox-package.sh 从 Mozilla 官方 CDN 下载.deb或.tar.bz2包并解压到/opt/firefox-99.0.1,同时ln -fs建立/usr/bin/firefox软链接。镜像内还会执行:
firefox --version | awk '{print $3}' > /opt/selenium/browsers/firefox/version这正是探测脚本所用命令的同一来源,保证构建期写入的版本信息与运行期--version输出一致。
GeckoDriver 安装(NodeFirefox/Dockerfile):默认GECKODRIVER_VERSION=latest时,先解析 mozilla/geckodriver 的最新 release 标签,再按架构下载对应 tar 包,最终通过软链接固定到/usr/bin/geckodriver。GeckoDriver 0.37.1 即 4.48.0 发布时解析到的版本。
运行期使用:Node 启动脚本 start-selenium-node.sh 在启动 Grid Node 时会显式注入-Dwebdriver.gecko.driver=/usr/bin/geckodriver,确保 WebDriver 会话使用镜像内固定的 GeckoDriver 路径;NodeFirefox/Dockerfile 还写入了{"moz:firefoxOptions": {"binary": ...}}到/opt/selenium/browsers/firefox/binary_location,供 Grid 自动生成 Node 配置时引用。
如何拉取和使用这些标签
以日志第 9 行为例,若需要"Firefox 99.0.1 + GeckoDriver 0.37.1 + Grid 4.48.0-20260909"这一最精确组合:
docker pull selenium/node-firefox:99.0.1-geckodriver-0.37.1-grid-4.48.0-20260909若只想锁定浏览器大版本而接受驱动随之绑定,可使用短版本标签:
docker pull selenium/node-firefox:99.0-20260909按 docs/docker-hub/node-firefox.md 的指引,Node 镜像需与 Hub 在同一 Docker 网络内协作:
docker network create grid docker run -d -p 4442-4444:4442-4444 --net grid --name selenium-hub selenium/hub:latest docker run -d --net grid -e SE_EVENT_BUS_HOST=selenium-hub --shm-size="2g" \ selenium/node-firefox:99.0-geckodriver-0.37-grid-4.48.0-20260909测试代码指向http://localhost:4444即可(可选地通过http://localhost:7900/?autoconnect=1&resize=scale&password=secret观察容器内画面)。注意:运行含浏览器的镜像务必加--shm-size=2g,使用宿主共享内存避免浏览器崩溃。使用后清理网络:docker network rm grid。文档同时建议使用完整标签固定浏览器与 Grid 版本,而非latest。
版本矩阵的生成与归档机制
这类变更日志并非手写,而是由 CHANGELOG/generate-matrix-readme.py 驱动。它按\d+\.\d+\.\d+识别版本目录、扫描每个浏览器_版本.md文件(re.match(r'([\w-]+)_(\d+)\.md')),自动生成 CHANGELOG/README.md 中的矩阵表;旧 Grid 版本目录会被移入archived/,仅保留最新版本在前台。因此,firefox_99.md既是一次发布的机器可读记录,也是矩阵表中 Firefox 99 一列的唯一权威链接目标,保证了"版本矩阵 → 变更日志 → 镜像标签"三者之间的可追溯闭环。
- 测试
- 后端
- 云原生
- 容器编排
- 可观测性
【免费下载链接】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 发布 Firefox 137.0.2:docker-selenium 浏览器镜像标签体系与发布流程全解析
Selenium Grid 4.48.0 发布 Firefox 137.0.2:docker selenium 浏览器镜像标签体系与发布流程全解析 本文以 CH
测试后端云原生容器编排可观测性docker-selenium 浏览器镜像标签体系详解:以 Selenium Grid 4.48.0 与 Chrome 99 版本组合为例
docker selenium 浏览器镜像标签体系详解:以 Selenium Grid 4.48.0 与 Chrome 99 版本组合为例 本篇技术指南聚焦 d
测试后端云原生容器编排可观测性Selenium Grid 4.48.0 发布 Edge 145 镜像:docker-selenium 浏览器版本标签体系与使用指南
Selenium Grid 4.48.0 发布 Edge 145 镜像:docker selenium 浏览器版本标签体系与使用指南 本文以 docker se
测试后端云原生容器编排可观测性
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考