news 2026/10/4 10:23:10

docker-selenium Firefox 141 发布记录解析:镜像标签命名规范与浏览器自动化部署实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
docker-selenium Firefox 141 发布记录解析:镜像标签命名规范与浏览器自动化部署实战
  • 测试
  • 后端
  • 云原生
  • 容器编排
  • 可观测性

【免费下载链接】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

项目地址:https://gitcode.com/GitHub_Trending/do/docker-selenium
点击查看免费下载

导读

本文以 docker-selenium 项目 Selenium Grid 4.48.0 版本 Firefox 141.0.3 发布记录(CHANGELOG/4.48.0/firefox_141.md)为核心,剖析本次发布的版本组合、标签生成机制与镜像矩阵,并结合仓库中的发布脚本与 NodeFirefox 镜像源码,讲清楚"如何选择正确的 Firefox 镜像标签"以及"标签背后浏览器、驱动与 Grid 三者版本的对应关系",帮助你基于 docker-selenium 搭建可复现、可追溯的 Firefox 自动化测试环境。


一、发布记录速览:本次 Firefox 141 发布包含哪些版本信息

firefox_141.md是 Selenium Grid 4.48.0 版本发布周期的浏览器发布记录之一(同一批次还包括 chrome-for-testing、edge、firefox_140 等记录)。记录本质是一次镜像打标签(tagging)过程的可审计日志,核心信息如下:

组件版本
Selenium Grid 版本4.48.0-20260909
Firefox 浏览器141.0.3
Firefox 短版本141.0
GeckoDriver0.37.1
GeckoDriver 短版本0.37
构建日期20260909
镜像命名空间selenium

日志完整列出了对selenium/node-firefox与selenium/standalone-firefox两组镜像追加的 12 个标签。这些标签并非随意命名,而是由项目根目录的 tag_and_push_browser_images.sh 脚本按固定规则自动生成(详见下文第三节)。

需要说明的是:文档中的日期20260909为发布构建日期,仅代表该发布记录的构建批次,并非当前系统时间。


二、理解标签体系:如何解读与选择 Firefox 镜像标签

2.1 标签结构总览

本次发布打出的 12 个标签可归纳为四类模式,其中<TAG_VERSION>即4.48.0-20260909(Selenium Grid 版本 + 构建日期):

标签模式示例(node-firefox)说明
<browser>-<driver>-<grid>完整长标签141.0.3-geckodriver-0.37.1-grid-4.48.0-20260909完整版本矩阵:浏览器 + 驱动 + Grid
<browser>-<driver>-<date>141.0.3-geckodriver-0.37.1-20260909浏览器 + 驱动 + 构建日期
<browser>-<date>141.0.3-20260909浏览器 + 构建日期
短版本系列(四类模式分别以141.0与0.37代替完整版本)141.0-geckodriver-0.37-grid-4.48.0-20260909、141.0-geckodriver-0.37-20260909、141.0-20260909便于在浏览器/驱动小版本间快速升级

2.2 短版本(Short version)的由来

日志中 "Short Firefox version -> 141.0" 与 "Short GeckoDriver version -> 0.37" 由脚本内的short_version()函数生成:它按.拆分版本号,仅保留前两段(主版本 + 次版本)。这样141.0标签会随同系列小版本(如 141.0.1、141.0.2、141.0.3)的后续发布自动指向最新镜像,适合想要"锁定大版本但跟随小版本更新"的场景。

2.3 长版本标签的用途

形如141.0.3-geckodriver-0.37.1-grid-4.48.0-20260909的完整标签将浏览器、驱动、Grid、构建日期四者全部锁定,是可完全复现的选择:无论何时拉取,得到的都是同一份经过验证的组合。官方推荐在生产环境使用完整标签固定版本,而不是latest(见 docs/docker-hub/node-firefox.md 与 docs/docker-hub/standalone-firefox.md)。

2.4 关于旧版本标签

注意到141与0.37这类不带日期的短标签在本次日志中并未出现。这是因为脚本逻辑:当RELEASE_OLD_VERSION参数为false(本次调用第 6 个参数即false)时,才会追加纯浏览器版本标签(141.0.3、141.0)与浏览器+驱动标签(141.0.3-geckodriver-0.37.1、141.0-geckodriver-0.37)。这 4 个标签留给旧版本发布流程使用,避免与"最新版"标签互相覆盖。


三、深入源码:tag_and_push_browser_images.sh 如何工作

发布记录由仓库根目录的 tag_and_push_browser_images.sh 执行生成。脚本针对firefox分支的关键流程如下:

3.1 参数与版本探测

VERSION=$1 # 4.48.0 BUILD_DATE=$2 # 20260909 NAMESPACE=$3 # selenium PUSH_IMAGE="${4:-false}" BROWSER=$5 # firefox RELEASE_OLD_VERSION="${6:-false}" PLATFORM="${7:-linux/amd64}"

脚本通过docker run临时启动已构建的node-firefox:${TAG_VERSION}镜像来探测实际版本:

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}')

随后对两组镜像执行retag node-firefox与retag standalone-firefox,为每个标签追加版本。

3.2 双模式打标签:本地 retag 与 registry 级 promote

retag()函数支持两种路径:

  • 常规路径:docker tag本地复制镜像并(可选)docker push,PUSH_IMAGE=true时推送;
  • promote 路径:当PROMOTE_TAGS=true时,直接使用docker buildx imagetools create在 registry 之间复制多架构 manifest(index),因为 release 流程此时直接复用测试过的镜像而非本地重建(脚本头部注释对此有详细说明)。

3.3 与 Makefile 的联动

Makefile 中tag_and_push_firefox_images目标(第 796 行)正是以同样参数调用该脚本:

./tag_and_push_browser_images.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) $(PUSH_IMAGE) firefox $(RELEASE_OLD_VERSION)

而tag_and_push_browser_images总目标(第 781 行)会依次串联 chrome、chrome-for-testing、chromium、edge、firefox 五个浏览器分支,因此每轮发布各浏览器会并行产出同构的标签矩阵。


四、镜像内部实现:node-firefox 如何构建 Firefox 141 + GeckoDriver 0.37.1

发布日志中的版本组合并非凭空生成,而是由 NodeFirefox/Dockerfile 的构建参数决定:

4.1 Firefox 安装策略

Dockerfile 定义FIREFOX_VERSION=latest等 ARG。amd64 架构或版本 ≥ 136 时优先从 Mozilla 官方 APT 仓库安装(install-firefox-apt.sh 配置了packages.mozilla.org源与固定指纹校验、Pin-Priority: 1000的 apt 偏好),否则通过 install-firefox-package.sh 下载官方.deb/.tar.bz2/.tar.xz包安装。对 141 这类新版本,amd64 走 APT 路径、aarch64 走下载路径(脚本内按dpkg --print-architecture自动判别x86_64与aarch64架构包)。

4.2 GeckoDriver 安装

GECKODRIVER_VERSION=latest时,Dockerfile 会解析mozilla/geckodriver最新 release,下载对应架构的geckodriver-${GK_VERSION}-${DRIVER_ARCH}.tar.gz解压到/opt/geckodriver-${GK_VERSION},并软链到/usr/bin/geckodriver,因此镜像内版本可通过geckodriver --version探测——这正是脚本 3.1 节获取 0.37.1 的来源。

4.3 浏览器信息与运行时环境

镜像构建后段还会固化浏览器元数据(NodeFirefox/Dockerfile):写入/opt/selenium/browsers/firefox/{name,version,binary_location},其中 binary_location 预置moz:firefoxOptions.binary为${SE_BROWSER_BINARY_LOCATION:-/usr/bin/firefox},允许通过环境变量自定义浏览器路径(对应 ENV_VARIABLES.md 中的SE_BROWSER_BINARY_LOCATION)。同时默认开启SE_NODE_ENABLE_MANAGED_DOWNLOADS=true,由 NodeBase/start-selenium-node.sh 在启动时追加--enable-managed-downloads,让 Node 自动管理会话下载文件。


五、实战:运行 Firefox 141 镜像并验证版本

5.1 Standalone 模式(单容器 Grid)

docker run -d -p 4444:4444 -p 7900:7900 \ --shm-size="2g" \ selenium/standalone-firefox:141.0.3-geckodriver-0.37.1-grid-4.48.0-20260909

将 WebDriver 测试指向http://localhost:4444即可;如需 VNC 观察,访问http://localhost:7900/?autoconnect=1&resize=scale&password=secret。

5.2 Node + Hub 模式

docker network create grid docker run -d -p 4442-4444:4442-4444 \ --net grid --name selenium-hub selenium/hub:4.48.0-20260909 docker run -d --net grid \ -e SE_EVENT_BUS_HOST=selenium-hub \ --shm-size="2g" \ selenium/node-firefox:141.0.3-geckodriver-0.37.1-grid-4.48.0-20260909

使用 PowerShell 时换行符改用反引号(`)。浏览器容器务必加--shm-size=2g,否则浏览器渲染进程可能因共享内存不足而崩溃。结束后可用docker network rm grid清理网络。

5.3 验证镜像内版本

docker run --rm selenium/node-firefox:141.0.3-geckodriver-0.37.1-grid-4.48.0-20260909 firefox --version docker run --rm selenium/node-firefox:141.0.3-geckodriver-0.37.1-grid-4.48.0-20260909 geckodriver --version

输出应与发布记录一致(Firefox 141.0.3、GeckoDriver 0.37.1),可快速确认镜像组合与预期相符。

5.4 会话回收配置

NodeFirefox 默认通过 firefox-cleanup.sh 定期清理残留的firefox-bin进程(由 firefox-cleanup.conf 交由 supervisord 托管),相关阈值可用环境变量调整:

  • SE_BROWSER_LEFTOVERS_PROCESSES_SECS(默认 7200):清理运行超过该秒数的 Firefox 进程;
  • SE_BROWSER_LEFTOVERS_INTERVAL_SECS(默认 3600):清理守护循环间隔;
  • SE_BROWSER_LEFTOVERS_TEMPFILES_DAYS(默认 1):临时文件保留天数。

详见 ENV_VARIABLES.md。


六、版本追踪与回归验证

本次发布日志位于 CHANGELOG/4.48.0/firefox_141.md,与同批次 firefox_140.md(Firefox 140.0.4 + GeckoDriver 0.37.1)对比可见:GeckoDriver 保持 0.37.1 不变,仅浏览器由 140.0.4 升级到 141.0.3,标签矩阵结构完全一致。若需回溯更早版本,CHANGELOG/archived 目录归档了旧发布记录,可作为镜像版本回归的对照依据。

这种"发布记录 + 标签矩阵 + 源码探测逻辑"三位一体的设计,使得每个镜像版本都可审计、可复现,也让使用者在挑选 Firefox 镜像标签时,能准确预判浏览器、驱动与 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

项目地址:https://gitcode.com/GitHub_Trending/do/docker-selenium
点击查看免费下载

相关推荐

上一篇:WebGL-Fluid-Simulation中的流体压力迭代求解:提升物理精度
下一篇:crypto-js版本更新:策略指南

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/4 10:21:31

边缘双节点高可用实战:KaiwuDB + DRBD + Pacemaker 方案解析

1. 为什么边缘场景需要一套“不贵”的高可用方案先聊个背景。我在生产环境里接触过不少物联网边缘项目&#xff0c;它们的数据库部署形态和互联网机房里的典型架构差别非常大。边缘机房通常只有几个节点&#xff0c;网络条件没有数据中心那么可靠&#xff0c;带宽也有限&#x…

作者头像 李华
网站建设 2026/10/4 10:21:27

C盘空间告急?用Csimplecleaner一键清理,实测评出16G垃圾

如果最近你发现电脑的C盘又红了&#xff0c;系统提示空间不足&#xff0c;打开磁盘一看连几个G的余量都不剩&#xff0c;那这篇东西大概率能派上用场。我说的不是让你去花钱买新硬盘&#xff0c;也不是让你重装系统&#xff0c;而是用一款叫Csimplecleaner的轻量清理工具&#…

作者头像 李华
网站建设 2026/10/4 10:19:21

AI Agent打造AI芯片全栈软件实战

1. 为什么硬造一块AI芯片&#xff0c;反而是学全栈软件最快的路先说一句可能有点反直觉的话&#xff1a;如果你真想搞懂AI芯片的全栈软件&#xff0c;最快的方式不是去读几百页的架构手册&#xff0c;也不是直接上手某个开源IP核的驱动代码&#xff0c;而是——自己造一块AI芯片…

作者头像 李华
网站建设 2026/10/4 10:18:16

卡牌游戏数值模型设计实战:从核心循环到经济平衡

1. 这不是数学题&#xff0c;是卡牌游戏的“心跳监测仪”你手里的那款卡牌游戏&#xff0c;为什么抽到传说卡时会心率飙升&#xff1f;为什么刚攒够资源却突然被对手一套 combo 打崩&#xff1f;为什么新手觉得节奏太快&#xff0c;老玩家又抱怨后期拖沓&#xff1f;这些不是玄…

作者头像 李华
网站建设 2026/10/4 10:17:21

云计算大赛备赛指南:从宣讲PPT拆解IaaS/PaaS/SaaS得分骨架

简介&#xff1a;这份PPT是第二届全国高校云计算应用创新大赛的宣讲材料&#xff0c;面向高校参赛学生、指导教师及云计算入门学习者&#xff0c;系统梳理了云计算的产生背景、核心概念与典型应用。内容从低硬件利用率、中间件配置复杂、资源负荷波动等驱动因素切入&#xff0c…

作者头像 李华
网站建设 2026/10/4 10:17:14

21种AI智能体设计模式学习教程:用TaoToken统一Key跑通Agent配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华