docker-selenium Firefox 116 镜像标签全解析:从 tag_and_push_browser_images.sh 看 Node/Standalone 镜像版本化发布机制
测试后端云原生容器编排可观测性【免费下载链接】docker-seleniumProvides 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 仓库中 CHANGELOG/archived/4.28.1/firefox_116.md 记录的 4.28.1 版本 Firefox 116 镜像打标日志为入口深入拆解 Selenium Grid 4.28.1-20250202 版本下 Firefox 116.0.3 与 GeckoDriver 0.35.0 的组合镜像所生成的全部 12 个标签。读者读完将掌握 docker-selenium 浏览器镜像的标签命名规范、tag_and_push_browser_images.sh脚本的完整执行流程、版本探测与打标原理以及如何为 Node/Standalone Firefox 镜像选择正确的固定版本标签。一、文档定位版本矩阵中的一张打标证据卡firefox_116.md是 docker-selenium 项目版本矩阵体系的产物之一。在 CHANGELOG/README.md 中每个 Grid 版本如 4.28.1都对应一张Grid 版本 × 浏览器版本矩阵表表中的每个 ✓ 都链接到对应浏览器版本的详细 changelog 文档。该文档的动机是在持续跟进最新 Selenium Grid 核心版本的同时允许用户固定浏览器版本进行跨浏览器测试或规避特定版本缺陷——用户只需找到镜像标签、拉取镜像即可开始测试。firefox_116.md记录的正是 4.28.1 发布时为 Firefox 116 系列镜像执行打标脚本的完整输出。它虽然不是一篇教程但包含了可复现的命令、确切的版本信息和完整的标签清单是理解 docker-selenium 浏览器镜像标签体系的最佳一手素材。二、命令全景一条命令生成 12 个 Firefox 镜像标签原文档以代码块形式记录了核心命令及其全部输出./tag_and_push_browser_images.sh 4.28.1 20250202 selenium false firefox true Tagging images for browser firefox, version 4.28.1, build date 20250202, namespace selenium Selenium Grid version - 4.28.1-20250202 Firefox version - 116.0.3 Short Firefox version - 116.0 GeckoDriver version - 0.35.0 Short GeckoDriver version - 0.35该脚本位于仓库根目录 tag_and_push_browser_images.sh其参数定义在脚本开头L3-L13参数位置变量名本次取值含义1VERSION4.28.1Selenium Grid 版本号2BUILD_DATE20250202构建日期YYYYMMDD3NAMESPACEselenium镜像仓库命名空间4PUSH_IMAGEfalse是否推送镜像到仓库默认false5BROWSERfirefox目标浏览器可选chrome/chromium/edge/firefox/chrome-for-testing6RELEASE_OLD_VERSIONtrue是否为旧版本补发标签默认false其中第 4 个参数在脚本中被解析为PUSH_IMAGE${4:-false}L6第 6 个参数为RELEASE_OLD_VERSION${6:-false}L8。本次PUSH_IMAGEfalse意味着只执行本地docker tag不执行docker push。在 Makefile 中这一命令被封装为tag_and_push_firefox_images目标L795-796tag_and_push_firefox_images: ./tag_and_push_browser_images.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) $(PUSH_IMAGE) firefox $(RELEASE_OLD_VERSION)其上层目标是tag_and_push_browser_imagesL781由 chrome、chrome-for-testing、chromium、edge、firefox 五个子目标串联而成对应附加浏览器镜像标签的发布流程仓库注释引用了 issue #992说明这些附加标签的由来。三、版本探测从已构建镜像内部读取真实版本打标脚本并不会凭空猜测版本号而是运行已构建好的镜像并执行二进制文件来探测版本。以 firefox 分支为例tag_and_push_browser_images.shFIREFOX_VERSION$(docker run --rm ${NAMESPACE}/node-firefox:${TAG_VERSION} firefox --version | awk {print $3}) echo Firefox version - ${FIREFOX_VERSION} FIREFOX_SHORT_VERSION$(short_version ${FIREFOX_VERSION}) echo Short Firefox version - ${FIREFOX_SHORT_VERSION} GECKODRIVER_VERSION$(docker run --rm ${NAMESPACE}/node-firefox:${TAG_VERSION} geckodriver --version | awk NR1{print $2}) echo GeckoDriver version - ${GECKODRIVER_VERSION} GECKODRIVER_SHORT_VERSION$(short_version ${GECKODRIVER_VERSION}) echo Short GeckoDriver version - ${GECKODRIVER_SHORT_VERSION}关键点探测基准镜像名为selenium/node-firefox:4.28.1-20250202TAG_VERSION${VERSION}-${BUILD_DATE}脚本 L15Firefox 版本通过firefox --version输出第 3 列取得awk {print $3}得到116.0.3GeckoDriver 版本通过geckodriver --version第一行的第 2 列取得得到0.35.0短版本号由脚本定义的short_version函数计算L53-L57只保留主版本.次版本两位function short_version() { local __long_version$1 local __version_split(${__long_version//./ }) echo ${__version_split[0]}.${__version_split[1]} }因此116.0.3 → 116.00.35.0 → 0.35。短版本标签的存在让用户无需记住完整的 Patch 号即可拉取该版本线的最近发布。这种镜像内自检的设计保证了标签与实际二进制绝对一致——标签上写什么版本容器里就是什么版本杜绝了构建参数与产物不一致的风险。在 Makefile 的firefox_upgrade_version目标中也能看到同样的验证手法构建后立即docker run校验 Selenium Server、Firefox、GeckoDriver 三个版本。四、标签命名规范12 个标签的构成逻辑原文档列出了 4.28.1 发布时为 Firefox 116 生成的完整标签清单Node 与 Standalone 各 6 个共 12 个selenium/node-firefox:116.0.3-geckodriver-0.35.0-grid-4.28.1-20250202 selenium/standalone-firefox:116.0.3-geckodriver-0.35.0-grid-4.28.1-20250202 selenium/node-firefox:116.0.3-geckodriver-0.35.0-20250202 selenium/standalone-firefox:116.0.3-geckodriver-0.35.0-20250202 selenium/node-firefox:116.0.3-20250202 selenium/standalone-firefox:116.0.3-20250202 selenium/node-firefox:116.0-geckodriver-0.35-grid-4.28.1-20250202 selenium/standalone-firefox:116.0-geckodriver-0.35-grid-4.28.1-20250202 selenium/node-firefox:116.0-geckodriver-0.35-20250202 selenium/standalone-firefox:116.0-geckodriver-0.35-20250202 selenium/node-firefox:116.0-20250202 selenium/standalone-firefox:116.0-20250202对照脚本中的FIREFOX_TAGS数组定义tag_and_push_browser_images.sh这些标签按详细度递减分为三组全版本组合最精确浏览器.Patch-geckodriver-驱动.驱动Patch-grid-Grid.构建日期即116.0.3-geckodriver-0.35.0-grid-4.28.1-20250202唯一确定一个精确到 Patch 的发布组合浏览器版本 构建日期浏览器.Patch-geckodriver-驱动.驱动Patch-构建日期与浏览器.Patch-构建日期适合在同一天发布中锁定浏览器与驱动短版本组合语义简化116.0-geckodriver-0.35-grid-4.28.1-20250202、116.0-geckodriver-0.35-20250202、116.0-20250202忽略 Patch 号让标签更短更易读。每个标签都通过retag函数同时作用于node-firefox与standalone-firefox两个镜像脚本 L232-L235这也是为什么输出中总是成对出现。旧版本补发的额外标签由于本次RELEASE_OLD_VERSIONtrue脚本跳过了 L219-L230 的追加逻辑该逻辑仅在RELEASE_OLD_VERSIONfalse时执行。若为新版本发布第 6 个参数为false还会额外追加 4 个不含构建日期的滚动式标签FIREFOX_TAGS( ${FIREFOX_VERSION}-geckodriver-${GECKODRIVER_VERSION} # 116.0.3-geckodriver-0.35.0 ${FIREFOX_VERSION} # 116.0.3 ${FIREFOX_SHORT_VERSION}-geckodriver-${GECKODRIVER_SHORT_VERSION} # 116.0-geckodriver-0.35 ${FIREFOX_SHORT_VERSION} # 116.0 )对比同一仓库最新版本 CHANGELOG/4.48.0/firefox_152.md 可以看到新版本发布时输出仍为 12 个标签但第 6 个参数为true旧版本归档。这一参数机制保证了旧版补发不会覆盖新版的滚动标签避免116.0这类短标签被历史版本反复改写。五、retag 函数本地打标与多架构镜像处理所有标签最终经由retag函数落地tag_and_push_browser_images.shfunction retag() { local __image$1 local __tag$2 local __source${NAMESPACE}/${__image}:${TAG_VERSION} if [ ${PROMOTE_TAGS} true ]; then docker buildx imagetools create ${__targets[]} ${__source} echo Tagged ${NAMESPACE}/${__image}:${__tag} return fi docker tag ${__source} ${NAMESPACE}/${__image}:${__tag} echo Tagged ${NAMESPACE}/${__image}:${__tag} if [ ${PUSH_IMAGE} true ]; then docker push ${NAMESPACE}/${__image}:${__tag} fi }该函数支持两种模式默认模式源镜像为selenium/node-firefox:4.28.1-20250202执行docker tag追加新标签若PUSH_IMAGEtrue再执行docker pushPROMOTE_TAGS 模式由PROMOTE_TAGS环境变量触发deploy.yml 在发布提升已测试镜像时使用由于镜像从未在本地构建docker tag无法表达 registry 到 registry 的复制且docker pull只能带回单架构镜像因此改用docker buildx imagetools create在manifest index 层面完成多架构标签复制脚本头注释 L18-L30 对此有详细说明。同时可通过PROMOTE_GHCR_NAMESPACE在同一调用中镜像到 GHCR。六、镜像底层Firefox 与 GeckoDriver 如何进入镜像标签体系背后是 NodeFirefox/Dockerfile 的构建逻辑Firefox 安装L21-L70通过FIREFOX_VERSION、FIREFOX_DOWNLOAD_URL、FIREFOX_LANG_VERSION三个构建参数控制。当版本为latest/beta-latest/nightly-latest/devedition-latest/esr-latest或 amd64 架构时走 install-firefox-apt.sh配置 Mozilla 官方 apt 源并校验签名指纹35BAA0B33E9EB396F59CA838C0BA5CE6DC6315A3设置Pin-Priority: 1000优先安装其他固定版本则通过 install-firefox-package.sh 从 Mozilla CDN 下载.deb或.tar.bz2包安装。安装后执行apt-get upgrade修复 Firefox 依赖链的潜在 CVE并清理 apt 缓存。GeckoDriver 安装L75-L86默认取 GitHub releases 的latest版本按架构下载linux64或linux-aarch64包解压到/opt/geckodriver-$GK_VERSION并符号链接到/usr/bin/geckodriver。这就是打标脚本能在容器内执行geckodriver --version探测版本的前提。浏览器信息归档L93-L96构建时把浏览器名称、版本写入/opt/selenium/browsers/firefox/并生成包含moz:firefoxOptions.binary的binary_location文件供 Grid 节点自动发现浏览器能力。最终Standalone/Dockerfile 以node-firefox为基础镜像--build-arg BASEnode-firefox在同一个镜像文件系统上叠加 Selenium Server 与 VNC/noVNC 等组件因此node-firefox与standalone-firefox共享同一套浏览器/驱动版本信息——这就是同一批标签能同时打到两个镜像上的根本原因。七、实战如何选择和使用这些标签文档所属的版本矩阵CHANGELOG/README.md提醒用户并非每个 Grid 与浏览器版本的组合都经过完整测试用户需根据自身测试需求自行评估。选择标签时参考 docs/docker-hub/node-firefox.md 的 Tagging Conventions开发/快速验证使用latest如selenium/node-firefox:latest锁定浏览器主版本使用短版本如selenium/node-firefox:116.0本发布中即116.0-20250202精确定位发布使用全版本组合如selenium/node-firefox:116.0.3-geckodriver-0.35.0-grid-4.28.1-20250202可同时锁定浏览器、驱动与 Grid 三者版本固定到某个构建日期使用含-YYYYMMDD后缀的标签。启动 Node 模式以本文 4.28.1 的 Firefox 116 镜像为例docker network create grid docker run -d -p 4442-4444:4442-4444 --net grid --name selenium-hub selenium/hub:4.28.1-20250202 docker run -d --net grid -e SE_EVENT_BUS_HOSTselenium-hub \ --shm-size2g \ selenium/node-firefox:116.0.3-geckodriver-0.35.0-grid-4.28.1-20250202注意浏览器类镜像运行时需使用--shm-size2g挂载足够的主机共享内存避免浏览器进程因/dev/shm不足而崩溃。测试完成后可用docker network rm grid清理网络。八、总结firefox_116.md虽是一份发布日志却完整呈现了 docker-selenium 浏览器镜像标签体系的三个核心设计镜像内版本自检保证标签与产物一致长短双版本号在精确性与可读性之间取得平衡RELEASE_OLD_VERSION参数避免历史发布覆盖新版本的滚动标签。理解这条打标流水线无论是选择固定版本镜像做回归测试还是复现历史发布组合都能做到有的放矢。相关实现可继续在 tag_and_push_browser_images.sh、Makefile、NodeFirefox/Dockerfile 与 CHANGELOG/README.md 中深入研读。赞分享测试后端云原生容器编排可观测性【免费下载链接】docker-seleniumProvides 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点击查看免费下载相关推荐Selenium Docker 镜像 Chrome 102 版本发布全解析tag_and_push_browser_images.sh 镜像标签机制深度解读Selenium Docker 镜像 Chrome 102 版本发布全解析tag_and_push_browser_images.sh 镜像标签机制深度解读测试后端云原生容器编排可观测性docker-selenium 4.28.1 归档版 Firefox 131 镜像标签全解析tag_and_push_browser_images.sh 的版本矩阵与发布机制docker selenium 4.28.1 归档版 Firefox 131 镜像标签全解析tag_and_push_browser_images.sh 的版测试后端云原生容器编排可观测性Selenium Grid 4.48.0 Chrome 118 镜像标签解析从 tag_and_push_browser_images.sh 看版本固化与多标签发布机制Selenium Grid 4.48.0 Chrome 118 镜像标签解析从 tag_and_push_browser_images.sh 看版本固化与多标测试后端云原生容器编排可观测性上一篇如何用org-brain构建编程学习知识网络Emacs用户的终极思维导图指南下一篇OpenDesign Cafe 设计系统使用指南从 Design Token 到组件产物的完整实践手册创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

毕业论文 AI 降重改写,几款常用降AIGC网站怎么选才靠谱

毕业论文 AI 降重改写,几款常用降AIGC网站怎么选才靠谱

摘要:本文围绕论文写作中的改写与降重需求,比较了几款常见的AI辅助工具,从改写能力、语言润色、引用规范等维度做横向梳理,并给出按写作阶段和语种匹配的选型思路。结论是先看清自己卡在改写还是润色,再决定用哪一类工…

2026/10/5 2:02:27 阅读更多 →
告别数据丢失烦恼:这款智能工具如何高效守护你的游戏存档

告别数据丢失烦恼:这款智能工具如何高效守护你的游戏存档

告别数据丢失烦恼:这款智能工具如何高效守护你的游戏存档 【免费下载链接】ludusavi Backup tool for PC game saves 项目地址: https://gitcode.com/GitHub_Trending/lu/ludusavi 你是否曾因系统崩溃丢失数百小时的游戏进度?是否经历过重装游戏后…

2026/10/5 2:02:27 阅读更多 →
蒸馏了500多个小说SKILL,终于开发了这个软件

蒸馏了500多个小说SKILL,终于开发了这个软件

用 AI 写长篇的人,大多卡在同一个地方。开篇几章写得挺好,人物立得住,节奏也顺。可写到十几章,问题就来了。人物性格开始飘,前面埋的伏笔忘了,上一章已经写死的配角又冒出来。到后来你只能手动把前面几万字…

2026/10/5 2:01:27 阅读更多 →

最新新闻

Claude Code Skills生态爆发:索引站检索、安装与避坑全指南

Claude Code Skills生态爆发:索引站检索、安装与避坑全指南

最近这个Claude Code Skills生态的热度,说实话涨得比我预想快太多了。我看到7.7万个Skills这个数字的时候愣了一下,因为往前推十个月,社区里能叫得上名字的Skill可能就三位数,大家还在互相分享"你写了个什么好玩的技能文件&q…

2026/10/5 2:47:46 阅读更多 →
计算机系统基础:CPU指令执行与存储层次全解析

计算机系统基础:CPU指令执行与存储层次全解析

你正在维护一个千人规模的微服务系统,线上出了问题,需要快速定位是GC停顿、锁竞争还是网络超时。这时候,大学里那本《深入理解计算机系统》突然就有了意义。很多人觉得架构师是画框图、定方案的角色,但真正决定方案上限的&#xf…

2026/10/5 2:47:45 阅读更多 →
MIT开源商城微信小程序实战:Spring Boot+MyBatis部署与二次开发指南

MIT开源商城微信小程序实战:Spring Boot+MyBatis部署与二次开发指南

这两年我折腾过的商城类项目不在少数,有自研的、有拿来改的,但大部分要么闭源、要么文档稀碎,真正让人愿意留下来继续看的并不多。这个MIT开源商城微信小程序属于“第一眼就顺眼”的那种,前端小程序源码、后台商城源码都在一个仓库…

2026/10/5 2:47:45 阅读更多 →
Linux入门必学:Vim编辑器核心操作与配置实战指南

Linux入门必学:Vim编辑器核心操作与配置实战指南

1. 为什么说vim是Linux绕不开的“门槛”很多刚接触Linux的朋友,第一次打开终端敲命令时,往往会撞上一个略显“野蛮”的家伙——vim。你明明只是想编辑一个配置文件,输入vim /etc/nginx/nginx.conf,结果屏幕一黑,光标停…

2026/10/5 2:47:45 阅读更多 →
SpringBoot+SSM实战:大连IT招聘平台设计与部署全解析

SpringBoot+SSM实战:大连IT招聘平台设计与部署全解析

最近把一个基于JavaSpringBootSSM的大连IT行业招聘平台完整跑了一遍,从数据库设计到前后端联调,再到打包部署,整个过程踩了不少坑,也梳理出了不少可以复用的经验。这个项目本质上是一个典型的JavaWeb全栈课设/毕设项目&#xff1a…

2026/10/5 2:47:45 阅读更多 →
Redis事务真相:从MULTI到WATCH,乐观锁与Lua脚本实战

Redis事务真相:从MULTI到WATCH,乐观锁与Lua脚本实战

1. 从“Redis事务到底是不是事务”说起先丢一个很多面试官爱问、很多同学也容易翻车的问题:Redis事务和MySQL事务,到底是不是一回事?先说结论——它们根本不在一个维度上。MySQL事务要的是ACID,尤其是隔离性和持久性;R…

2026/10/5 2:46:45 阅读更多 →

日新闻

马斯克杀回智能体战场,Grok 4.5万亿参数撑腰,Cursor接手数字白领项目:用TaoToken统一Key跑通多模型Agent工作流

马斯克杀回智能体战场,Grok 4.5万亿参数撑腰,Cursor接手数字白领项目:用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 …

2026/10/5 0:00:22 阅读更多 →
AI编程工具插件机制详解:plugin.json配置与加载失败排查指南

AI编程工具插件机制详解:plugin.json配置与加载失败排查指南

1. 从“plugins”这个词说起:它到底在解决什么问题如果你最近在折腾 AI 编程工具,尤其是 Cursor、Codex CLI、Claude Code 这类带 CLI 的编辑器或命令行助手,那你大概率绕不开一个词——plugins。这个词本身不新鲜,从浏览器到 IDE…

2026/10/5 0:00:23 阅读更多 →
第26课:OpenClaw|日志审计与问题诊断:把日志链路改到 TaoToken 的排查清单

第26课:OpenClaw|日志审计与问题诊断:把日志链路改到 TaoToken 的排查清单

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

2026/10/5 0:00:23 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

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

2026/10/4 1:00:58 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

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

2026/10/5 1:10:22 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

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

2026/10/4 1:00:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/4 11:40:45 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/4 9:43:54 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/4 20:14:29 阅读更多 →