- 测试
- 后端
- 云原生
- 容器编排
- 可观测性
【免费下载链接】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.34.0 版本 Firefox 129.0.2 镜像的发布记录,完整解析tag_and_push_browser_images.sh打标签脚本的参数约定、标签命名规范与底层执行流程,并结合 NodeFirefox/Dockerfile 说明 Firefox 与 GeckoDriver 是如何被封装进 Node 与 Standalone 镜像的。读者读完将能理解浏览器镜像的完整标签体系,并掌握如何通过精确镜像标签锁定特定浏览器、驱动与 Grid 版本组合。
发布记录:4.34.0 版本 Firefox 129 镜像的完整标签清单
本次发布记录(CHANGELOG/archived/4.34.0/firefox_129.md)是一次针对 Firefox 浏览器镜像的发布/打标签操作的原始日志,对应 Selenium Grid 4.34.0、Firefox 129.0.2 与 GeckoDriver 0.36.0 的组合。其执行命令与输出如下:
./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 -> 129.0.2 Short Firefox version -> 129.0 GeckoDriver version -> 0.36.0 Short GeckoDriver version -> 0.36 Tagged selenium/node-firefox:129.0.2-geckodriver-0.36.0-grid-4.34.0-20250727 Tagged selenium/standalone-firefox:129.0.2-geckodriver-0.36.0-grid-4.34.0-20250727 Tagged selenium/node-firefox:129.0.2-geckodriver-0.36.0-20250727 Tagged selenium/standalone-firefox:129.0.2-geckodriver-0.36.0-20250727 Tagged selenium/node-firefox:129.0.2-20250727 Tagged selenium/standalone-firefox:129.0.2-20250727 Tagged selenium/node-firefox:129.0-geckodriver-0.36-grid-4.34.0-20250727 Tagged selenium/standalone-firefox:129.0-geckodriver-0.36-grid-4.34.0-20250727 Tagged selenium/node-firefox:129.0-geckodriver-0.36-20250727 Tagged selenium/standalone-firefox:129.0-geckodriver-0.36-20250727 Tagged selenium/node-firefox:129.0-20250727 Tagged selenium/standalone-firefox:129.0-20250727版本信息解读
| 维度 | 值 | 说明 |
|---|---|---|
| Selenium Grid 版本 | 4.34.0-20250727 | Grid 主版本 + 构建日期,构建日期为 2025-07-27 |
| Firefox 完整版本 | 129.0.2 | 由firefox --version输出解析得到 |
| Firefox 短版本 | 129.0 | 取完整版本号的前两段 |
| GeckoDriver 完整版本 | 0.36.0 | 由geckodriver --version首行解析得到 |
| GeckoDriver 短版本 | 0.36 | 取完整版本号的前两段 |
从发布日志看,这次操作一次性为node-firefox与standalone-firefox两类镜像各生成了 6 个标签,共 12 个标签。短版本(Short)标签是本次发布的关键设计:当浏览器存在小版本补丁升级(如 129.0.2 → 129.0.3)时,短版本标签129.0可以让使用者持续拉取同一主版本的最新镜像,同时避免标签频繁变动。
标签命名约定:三类标签的构成规则
参照 docs/docker-hub/node-firefox.md 中关于标签结构的说明,本次发布涉及的 12 个标签可分为三类:
1. 完整信息标签(全版本 + Grid 版本 + 构建日期)
selenium/node-firefox:129.0.2-geckodriver-0.36.0-grid-4.34.0-20250727构成:<browserVersion>-geckodriver-<driverVersion>-grid-<gridVersion>-<buildDate>
这是信息量最完整的标签,精确锁定浏览器、驱动、Grid 与构建日期四个维度,适合要求严格可复现的测试环境。
2. 组合标签(浏览器版本/驱动版本 + 构建日期)
129.0.2-geckodriver-0.36.0-20250727:浏览器完整版本 + 驱动完整版本 + 构建日期129.0.2-20250727:浏览器完整版本 + 构建日期129.0-geckodriver-0.36-20250727:短版本组合 + 构建日期129.0-20250727:浏览器短版本 + 构建日期
3. 短版本标签(发布期后追加的稳定标签)
selenium/node-firefox:129.0-geckodriver-0.36-grid-4.34.0-20250727这一组将浏览器短版本、驱动短版本与 Grid 完整版本组合,方便在后续小版本补丁发布时保持标签稳定。
需要注意:本记录中没有生成129.0.2、129.0、129.0.2-geckodriver-0.36.0这类不带构建日期的纯版本标签。从 tag_and_push_browser_images.sh 源码看,这类标签仅在RELEASE_OLD_VERSION=false(即正式发布而非旧版本回溯)时才会追加生成。
打标签脚本机制:tag_and_push_browser_images.sh 的完整执行链路
发布日志中的命令指向仓库根目录下的 tag_and_push_browser_images.sh,该脚本是本次发布的执行主体。其参数定义位于脚本开头:
| 参数 | 位置 | 默认值 | 本次调用值 | 说明 |
|---|---|---|---|---|
| VERSION | $1 | 无 | 4.34.0 | Selenium Grid 版本号 |
| BUILD_DATE | $2 | 无 | 20250727 | 构建日期(YYYYMMDD) |
| NAMESPACE | $3 | 无 | selenium | Docker Hub 镜像命名空间 |
| PUSH_IMAGE | $4 | false | false | 是否推送镜像到仓库 |
| BROWSER | $5 | 无 | firefox | 目标浏览器 |
| RELEASE_OLD_VERSION | $6 | false | true | 是否为旧版本发布(回溯打标签) |
| PLATFORM | $7 | linux/amd64 | linux/amd64 | 目标平台 |
脚本首先拼出基础标签TAG_VERSION=4.34.0-20250727,随后进入firefox分支(tag_and_push_browser_images.sh),依次执行:
- 探测浏览器版本:
docker run --rm selenium/node-firefox:4.34.0-20250727 firefox --version | awk '{print $3}',得到129.0.2; - 探测驱动版本:
docker run --rm selenium/node-firefox:4.34.0-20250727 geckodriver --version | awk 'NR==1{print $2}',得到0.36.0; - 计算短版本:通过
short_version()函数(tag_and_push_browser_images.sh)将完整版本号按.分割后取前两段,得到129.0与0.36; - 组装标签数组
FIREFOX_TAGS,并在RELEASE_OLD_VERSION=false时追加不带构建日期的标签; - 遍历打标签:对
node-firefox与standalone-firefox分别调用retag函数。
关键设计在于retag()函数(tag_and_push_browser_images.sh):它先从已构建的基础镜像(${NAMESPACE}/${image}:${TAG_VERSION})派生新标签,且支持两种路径——默认用docker tag本地打标签并在PUSH_IMAGE=true时推送;当PROMOTE_TAGS=true时改用docker buildx imagetools create在 registry 间直接复制多架构 manifest(避免docker pull只带回本机架构导致标签退化为单架构)。这解释了发布日志中每条Tagged输出的来源。
镜像底层实现:Firefox 129 与 GeckoDriver 0.36.0 如何进入容器
镜像的实际构建逻辑位于 NodeFirefox/Dockerfile,它以node-base为基础镜像(FROM ${NAMESPACE}/${BASE}:${VERSION}),以FIREFOX_VERSION=latest、GECKODRIVER_VERSION=latest为默认构建参数,并在构建时替换为具体版本。
Firefox 129 的安装策略
对于 Firefox 129.0.2 这一具体版本(主版本号 129 < 136),Dockerfile 走的是官方发布包下载路径(NodeFirefox/Dockerfile):
- 根据架构(amd64 → x86_64,aarch64 → aarch64)拼接下载地址
https://download-installer.cdn.mozilla.net/pub/firefox/releases/129.0.2/linux-x86_64/en-US/firefox-129.0.2.deb; - 若返回 404 则回退到
.tar.bz2归档包; - 交由 NodeFirefox/install-firefox-package.sh 完成安装——
.deb包通过apt-get install -y --allow-downgrades -f安装,.tar.bz2/.tar.xz则解压到/opt/firefox-<version>并软链到/usr/bin/firefox; - 最后执行
apt-get upgrade修补依赖中的已知 CVE。
(对比:对于latest/beta-latest/esr-latest等动态版本,则走 NodeFirefox/install-firefox-apt.sh 配置的 Mozilla APT 源;从源码结构看,FIREFOX_MAJOR_VERSION >= 136后 amd64 架构也统一切换到 APT 路径。)
此外 NodeFirefox/get_lang_package.sh 会从 Mozilla FTP 为 129.0.2 下载全部语言包(langpack-*@firefox.mozilla.org.xpi)到distribution/extensions目录,保证多语言环境可用。
GeckoDriver 0.36.0 的安装策略
NodeFirefox/Dockerfile 中的 GeckoDriver 安装逻辑首先通过 GitHub releases 的latest重定向解析最新版本号,再按架构选择linux64或linux-aarch64压缩包下载,解压到/opt/geckodriver-0.36.0后软链为/usr/bin/geckodriver。本次发布正是通过该机制将 0.36.0 版本固化进镜像。
浏览器信息注册与进程守护
构建尾声,Dockerfile 会向/opt/selenium/browsers/firefox/写入name、version、binary_location三个文件(NodeFirefox/Dockerfile),供 Selenium Grid Node 注册能力时读取,其中 binary_location 内容为:
{"moz:firefoxOptions": {"binary": "${SE_BROWSER_BINARY_LOCATION:-/usr/bin/firefox}"}}容器运行后,NodeFirefox/firefox-cleanup.sh 作为 supervisord 守护进程周期性清理残留的firefox-bin进程(间隔与进程年龄阈值由SE_BROWSER_LEFTOVERS_INTERVAL_SECS、SE_BROWSER_LEFTOVERS_PROCESSES_SECS控制),避免长时间运行的测试集群中堆积僵尸浏览器进程。
版本矩阵:4.34.0 中 Firefox 129 的定位
本次发布记录归档于 CHANGELOG/archived/4.34.0/,属于已归档的 Grid 版本。在 CHANGELOG/README.md 维护的版本矩阵中,Firefox 129 这一列覆盖了从 4.28.1 到 4.48.0 的多个 Grid 版本,且 Firefox 129 与 130、131、132、133、134、135 等版本在 4.34.0 发布时均有对应镜像(见archived/4.34.0/firefox_130.md、firefox_131.md等相邻发布记录),说明 4.34.0 是一次覆盖多浏览器版本矩阵的批量发布。
归档机制的意义在于:CHANGELOG 目录中保留最新 Grid 版本(如 4.48.0)的完整记录,而历史版本的记录移入archived/子目录,既保证了矩阵可追溯,又让最新版本列表保持聚焦。矩阵还明确提示:项目并未对每种 Grid 与浏览器版本的组合做完整测试,使用者需要依据自身测试需求评估选择。
如何选择并使用 Firefox 129 镜像
根据 docs/docker-hub/node-firefox.md 的说明,Node 模式下的典型启动方式为:
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:129.0.2-geckodriver-0.36.0-grid-4.34.0-20250727实践建议:
- 运行含浏览器的容器务必添加
--shm-size=2g,使用宿主机共享内存避免浏览器崩溃; - 需要精确复现测试环境时,使用
129.0.2-geckodriver-0.36.0-grid-4.34.0-20250727这类全信息标签; - 希望在 129 主版本内跟随补丁更新时,可选用
129.0短版本标签; - 验证标签对应的真实版本可用
docker run --rm <image> firefox --version与docker run --rm <image> geckodriver --version检查,这与打标签脚本内部的探测命令完全一致。
总结
从 CHANGELOG/archived/4.34.0/firefox_129.md 这份发布日志出发,可以完整还原 docker-selenium 浏览器镜像的发布链路:构建(NodeFirefox/Dockerfile)→ 版本探测 → 短版本换算 → 多标签生成(tag_and_push_browser_images.sh)→ 归档入矩阵(CHANGELOG/README.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
相关推荐
Mumble Windows 构建环境搭建指南:MSVC 与 Visual Studio 的完整配置
Mumble Windows 构建环境搭建指南:MSVC 与 Visual Studio 的完整配置 Mumble 是一款开源、低延迟、高质量的语音聊天软件。在
测试后端云原生容器编排可观测性docker-selenium 发布解析:Firefox 108.0.2 + GeckoDriver 0.36.0 + Selenium Grid 4.34.0 镜像标签生成全流程
docker selenium 发布解析:Firefox 108.0.2 + GeckoDriver 0.36.0 + Selenium Grid 4.34.0
测试后端云原生容器编排可观测性docker-selenium 归档版本解析:4.34.0 下 Firefox 107.0.1 + GeckoDriver 0.36.0 镜像标签全解读
docker selenium 归档版本解析:4.34.0 下 Firefox 107.0.1 + GeckoDriver 0.36.0 镜像标签全解读 本篇以
测试后端云原生容器编排可观测性
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考