docker-selenium 4.32.0 发布档案解读:Firefox 133.0.3 镜像的多标签生成与使用全流程
测试后端云原生容器编排可观测性【免费下载链接】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点击查看免费下载本篇指南以仓库 CHANGELOG 归档中的 Firefox 133 发布记录CHANGELOG/archived/4.32.0/firefox_133.md为核心讲解 docker-selenium 在 Selenium Grid 4.32.0 版本下如何为 Firefox 133.0.3 GeckoDriver 0.36.0 生成node-firefox与standalone-firefox两套共 20 个镜像标签。读完本文你将掌握镜像标签的命名规则、tag_and_push_browser_images.sh的完整执行逻辑以及如何按标签精确拉取与运行对应版本的 Firefox 浏览器节点。发布记录原文一次完整的镜像打标输出firefox_133.md记录的是通过仓库根目录脚本 tag_and_push_browser_images.sh 为 Firefox 133 打标签并发布的完整命令与输出。原文内容如下./tag_and_push_browser_images.sh 4.32.0 20250505 selenium false firefox true Tagging images for browser firefox, version 4.32.0, build date 20250505, namespace selenium Selenium Grid version - 4.32.0-20250505 Firefox version - 133.0.3 Short Firefox version - 133.0 GeckoDriver version - 0.36.0 Short GeckoDriver version - 0.36 Tagged selenium/node-firefox:133.0.3-geckodriver-0.36.0-grid-4.32.0-20250505 Tagged selenium/standalone-firefox:133.0.3-geckodriver-0.36.0-grid-4.32.0-20250505 Tagged selenium/node-firefox:133.0.3-geckodriver-0.36.0-20250505 Tagged selenium/standalone-firefox:133.0.3-geckodriver-0.36.0-20250505 Tagged selenium/node-firefox:133.0.3-20250505 Tagged selenium/standalone-firefox:133.0.3-20250505 Tagged selenium/node-firefox:133.0-geckodriver-0.36-grid-4.32.0-20250505 Tagged selenium/standalone-firefox:133.0-geckodriver-0.36-grid-4.32.0-20250505 Tagged selenium/node-firefox:133.0-geckodriver-0.36-20250505 Tagged selenium/standalone-firefox:133.0-20250505 Tagged selenium/node-firefox:133.0-20250505 Tagged selenium/standalone-firefox:133.0-20250505从输出可以提炼出本次发布的三组版本事实组件版本Selenium Grid4.32.0构建日期 20250505合并标识4.32.0-20250505Firefox133.0.3短版本 133.0GeckoDriver0.36.0短版本 0.36脚本调用链Makefile 如何驱动打标tag_and_push_browser_images.sh并不是独立手动执行的而是由仓库根目录 Makefile 中的 target 编排。Makefile 第 781 行定义tag_and_push_browser_images: tag_and_push_chrome_images tag_and_push_chrome-for-testing_images tag_and_push_chromium_images tag_and_push_firefox_images tag_and_push_edge_images其中 Firefox 对应的 target 为Makefile 第 795-796 行tag_and_push_firefox_images: ./tag_and_push_browser_images.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) $(PUSH_IMAGE) firefox $(RELEASE_OLD_VERSION)对照发布记录中的命令可以确定各位置参数的实际含义位置参数值含义$1VERSION4.32.0Selenium Grid 发布版本号$2BUILD_DATE20250505构建日期YYYYMMDD$3NAMESPACEseleniumDocker Hub 命名空间决定镜像全名前缀$4PUSH_IMAGEfalse是否执行docker push推送$5BROWSERfirefox浏览器类型脚本内case分支入口$6RELEASE_OLD_VERSIONtrue是否保留旧版本浮动标签脚本开头还支持两个由环境变量注入的选项PROMOTE_TAGS默认false与PROMOTE_GHCR_NAMESPACE默认空它们与 release 流程中“直接提升已测试镜像而不是重新构建”的路径相关详见下文 retag 小节。版本探测先运行镜像再解析版本号脚本进入firefox分支tag_and_push_browser_images.sh 第 195-204 行后会先基于已构建好的基础标签镜像探测真实版本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 NR1{print $2})这里的关键点是基础镜像 tag 是selenium/node-firefox:4.32.0-20250505即TAG_VERSION${VERSION}-${BUILD_DATE}脚本第 15 行Firefox 版本从firefox --version输出的第三列取得到133.0.3GeckoDriver 版本从geckodriver --version输出的第一行第二列取得到0.36.0两个docker run都使用--rm即临时容器运行完毕即清理不打乱镜像层。随后通过short_version函数第 53-57 行截取主次版本function short_version() { local __long_version$1 local __version_split(${__long_version//./ }) echo ${__version_split[0]}.${__version_split[1]} }即按.切分后取前两段133.0.3→133.00.36.0→0.36。短版本的存在意义是让用户可以用“大版本 次版本”的宽松标签如133.0自动跟随同一次版本内的补丁更新详见下文标签规则。标签生成规则20 个标签的排列组合FIREFOX_TAGS数组tag_and_push_browser_images.sh 第 206-230 行在两种版本维度长/短与三种信息维度浏览器、驱动、Grid之间做排列每一组组合都会同时打到node-firefox与standalone-firefox两个镜像名上因此共生成 20 条Tagged输出。先看基础 12 个标签每组 6 个每个镜像名各得 6 个它们在发布记录中均可逐条对应标签模式实际标签node-firefox 示例语义${FIREFOX_VERSION}-geckodriver-${GECKODRIVER_VERSION}-grid-${TAG_VERSION}133.0.3-geckodriver-0.36.0-grid-4.32.0-20250505完整四要素浏览器补丁版本 驱动版本 Grid 版本 日期可精确定位${FIREFOX_VERSION}-geckodriver-${GECKODRIVER_VERSION}-${BUILD_DATE}133.0.3-geckodriver-0.36.0-20250505浏览器补丁版本 驱动版本 日期${FIREFOX_VERSION}-${BUILD_DATE}133.0.3-20250505浏览器补丁版本 日期${FIREFOX_SHORT_VERSION}-geckodriver-${GECKODRIVER_SHORT_VERSION}-grid-${TAG_VERSION}133.0-geckodriver-0.36-grid-4.32.0-20250505短版本四要素组合${FIREFOX_SHORT_VERSION}-geckodriver-${GECKODRIVER_SHORT_VERSION}-${BUILD_DATE}133.0-geckodriver-0.36-20250505短版本 驱动 日期${FIREFOX_SHORT_VERSION}-${BUILD_DATE}133.0-20250505短版本 日期当RELEASE_OLD_VERSIONfalse时脚本还会追加 4 个不带日期、用于滚动更新的浮动标签第 219-229 行${FIREFOX_VERSION}-geckodriver-${GECKODRIVER_VERSION}、${FIREFOX_VERSION}、${FIREFOX_SHORT_VERSION}-geckodriver-${GECKODRIVER_SHORT_VERSION}、${FIREFOX_SHORT_VERSION}。值得注意的是发布记录中的命令第 6 个参数为true即本次发布属于“发布旧版本镜像”场景因此输出中只有日期化的 6 类标签没有出现selenium/node-firefox:133.0.3这类不带日期的浮动标签——这正是RELEASE_OLD_VERSIONtrue的实际可见效果也解释了归档记录与最新版发布输出之间的差异。retag 与推送docker tag、docker push 与 imagetools所有标签都通过retag函数tag_and_push_browser_images.sh 第 31-51 行落地其核心逻辑为docker tag ${NAMESPACE}/${__image}:${TAG_VERSION} ${NAMESPACE}/${__image}:${__tag} echo Tagged ${NAMESPACE}/${__image}:${__tag} if [ ${PUSH_IMAGE} true ]; then docker push ${NAMESPACE}/${__image}:${__tag} fi即先在本地为同一个镜像创建别名 tag再按PUSH_IMAGE参数决定是否逐条推送。本次记录中PUSH_IMAGEfalse因此只输出Tagged ...而不执行推送与日志完全吻合。retag还包含一条特殊路径当PROMOTE_TAGStrue时镜像并不在本地构建而是通过docker buildx imagetools create直接在 registry 之间为多架构 manifestindex添加标签并可借助PROMOTE_GHCR_NAMESPACE在同一次调用中同步镜像到 GHCR脚本第 36-44 行注释对此有详细说明。这与 Makefile 第 798-808 行的tag_and_push_browser_images_ghcrtarget 相互配合保证 GHCR 镜像与 Docker Hub 保持同一套标签。镜像标签的实际使用Node 与 Standalone 两种部署发布记录中同时打标的node-firefox与standalone-firefox对应两种不同的 Selenium Grid 拓扑使用方式在 docs/docker-hub/node-firefox.md 与 docs/docker-hub/standalone-firefox.md 中有完整示例。Node 模式接入 Selenium Grid HubNode 镜像需要与 Hub 在同一 Docker 网络内通过容器名互相发现# 1. 创建网络 docker network create grid # 2. 启动 Hub docker run -d -p 4442-4444:4442-4444 --net grid --name selenium-hub selenium/hub:latest # 3. 启动 Firefox 节点固定到本次发布的具体版本 docker run -d --net grid -e SE_EVENT_BUS_HOSTselenium-hub \ --shm-size2g \ selenium/node-firefox:133.0.3-geckodriver-0.36.0-grid-4.32.0-20250505 # 4. 将 WebDriver 测试指向 http://localhost:4444Windows PowerShell 下将行尾\替换为即可。容器内可通过 http://localhost:7900/?autoconnect1resizescalepasswordsecret 查看运行画面。Standalone 模式单容器即完整 Griddocker run -d -p 4444:4444 -p 7900:7900 --shm-size2g \ selenium/standalone-firefox:133.0.3-geckodriver-0.36.0-grid-4.32.0-20250505无论哪种模式官方文档都强调凡含浏览器的镜像必须使用--shm-size2g以使用宿主共享内存否则浏览器进程可能因/dev/shm空间不足而崩溃同时建议使用完整标签如上面带-grid-的长标签锁定浏览器与 Grid 版本而不是依赖latest。latest仅是 Makefile 中tag_latesttarget第 828 行起在发布收尾阶段为最新版本追加的便捷别名。底层镜像支撑Firefox 133.0.3 与 GeckoDriver 0.36.0 的安装逻辑发布记录中的版本号并非凭空而来而是由 NodeFirefox/Dockerfile 的构建参数决定。该 Dockerfile 支持FIREFOX_VERSION默认latest与GECKODRIVER_VERSION默认latest两个构建参数Firefox 部分Dockerfile 第 21-70 行当指定数字版本时优先拼接 Mozilla CDN 的.deb下载地址若返回 404 则回退到.tar.bz2包安装交给 NodeFirefox/install-firefox-package.sh该脚本会针对.deb、.tar.bz2、.tar.xz三种包类型分别处理并在/opt/firefox-${FIREFOX_VERSION}下建立distribution/extensions目录、以软链接将二进制暴露为/usr/bin/firefox语言包Dockerfile 第 66 行调用 NodeFirefox/get_lang_package.sh从 Mozilla FTP 抓取对应版本的全部.xpi语言包重命名为langpack-localefirefox.mozilla.org.xpi后装入扩展目录GeckoDriver 部分Dockerfile 第 75-86 行动态解析 GitHub Releases 的最新 tag按linux64/linux-aarch64选择驱动架构压缩包解压后软链接到/usr/bin/geckodriver构建收尾Dockerfile 第 93-96 行将firefox名称、版本号及moz:firefoxOptions.binary的 JSON 模板写入/opt/selenium/browsers/firefox/供 Selenium Grid 节点注册时上报浏览器能力。也就是说firefox_133.md中探测到的133.0.3与0.36.0正是这一构建链路在 4.32.0 版本构建参数下的产物。归档与矩阵这条记录在 CHANGELOG 中的位置firefox_133.md位于CHANGELOG/archived/4.32.0/目录下属于已归档版本。CHANGELOG 的维护逻辑由 CHANGELOG/generate-matrix-readme.py 支撑脚本会扫描形如x.y.z的 Grid 版本目录将除最新版本以外的目录整体移动到archived/下脚本第 10-45 行的archive_old_versions函数并按firefox_133.md这类browser_version.md的文件命名生成版本矩阵 READMEscan_changelog函数。在 CHANGELOG/README.md 的 “Archived Grid Versions → Firefox” 表格中4.32.0行包含从firefox_98.md到firefox_137.md的 40 个版本链接firefox_133.md即其中之一。矩阵表头是浏览器大版本号因此无论是133.0.3还是133.0.2见同目录下的 firefox_134.md 可对照同批次其他版本都归入133这一列。README 的说明也明确指出每个 ✓ 都链接到对应 Grid 版本下该浏览器版本的详细 changelog且仓库并未对所有 Grid × 浏览器组合做全量测试用户需要按自己的测试需求评估选择——这正是这份发布档案作为“事实记录”而非“兼容性承诺”的定位。小结通过解读 CHANGELOG/archived/4.32.0/firefox_133.md 这份发布档案我们可以完整还原 docker-selenium 的一次 Firefox 版本发布从 Makefile 的 target 编排到 tag_and_push_browser_images.sh 的版本探测、短版本截取与 20 个标签的排列生成再到 NodeFirefox/Dockerfile 对 Firefox 133.0.3 与 GeckoDriver 0.36.0 的底层安装最后落到 docs/docker-hub/node-firefox.md 与 docs/docker-hub/standalone-firefox.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点击查看免费下载相关推荐SDL2 触控输入开发指南从 README-touch 到触摸事件 API 的完整实战解析SDL2 触控输入开发指南从 README touch 到触摸事件 API 的完整实战解析 导读 本文以当前仓库中随 SDL2 2.0.10 一同发布的官方文测试后端云原生容器编排可观测性OptiScaler 完整上手教程把任何显卡的游戏上采样自由换装DLSS/XeSS/FSR 全都能换OptiScaler 完整上手教程把任何显卡的游戏上采样自由换装DLSS/XeSS/FSR 全都能换 OptiScaler 是一个免费开源的中间层工具游测试后端云原生容器编排可观测性10 分钟配好大麦自动抢票抢下秒光演唱会门票的实战入门指南10 分钟配好大麦自动抢票抢下秒光演唱会门票的实战入门指南 热门演出开售不到三秒页面就弹出了售罄——这是大多数人抢演唱会门票的真实处境。大麦自动抢票就是测试后端云原生容器编排可观测性上一篇cnn-explainer中的集成测试从用户流程到系统交互下一篇告别电池焦虑AlDente-Charge-Limiter背后的MIT许可证全解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Text-to-CAD实测:用自然语言驱动B-rep建模的工程实践指南

Text-to-CAD实测:用自然语言驱动B-rep建模的工程实践指南

我大概从去年年底开始密集接触text-to-cad这个方向,一开始看Zoo放出来的演示,输入一句英文描述就能得到可编辑的STEP模型,第一反应是这玩意儿八成是个高级玩具。但连续跑了几十轮,把生成结果拉进SolidWorks和FreeCAD里反复改了又改…

2026/10/9 10:35:46 阅读更多 →
Hyperf WebSocket Server 实战指南:从零搭建高性能 WebSocket 服务

Hyperf WebSocket Server 实战指南:从零搭建高性能 WebSocket 服务

后端微服务 【免费下载链接】hyperf 🚀 A coroutine framework that focuses on hyperspeed and flexibility. Building microservice or middleware with ease. 项目地址: https://gitcode.com/gh_mirrors/hy/hyperf 点击查看 免费下载 导读 Hyperf 对…

2026/10/9 10:35:05 阅读更多 →
NOCODE Context Engineering 实战指南:不用写一行代码,用协议壳、Pareto-lang 与场论驯服 AI 上下文窗口

NOCODE Context Engineering 实战指南:不用写一行代码,用协议壳、Pareto-lang 与场论驯服 AI 上下文窗口

文档教程知识库人工智能提示工程 【免费下载链接】Context-Engineering "Context engineering is the delicate art and science of filling the context window with just the right information for the next step." — Andrej Karpathy. A frontier, first-princi…

2026/10/9 10:35:18 阅读更多 →

最新新闻

1900.1-2026.4全球地缘政治风险指数GPR数据(月度)

1900.1-2026.4全球地缘政治风险指数GPR数据(月度)

1900.1-2026.4全球地缘政治风险指数GPR数据(月度) 1、时间:1900.1-2026.4 2、指标:Date (year/month)、Recent GPR (Index: 1985:2019100)、Recent GPR Threats (Index: 1985:2019100)、Recent GPR Acts (Index: 1985:2019100)、…

2026/10/9 13:50:42 阅读更多 →
人工智能实战微信小程序demo:从解压到跑通AI推理全链路

人工智能实战微信小程序demo:从解压到跑通AI推理全链路

简介:这是一份面向人工智能与微信小程序开发初学者的实战型演示项目源码,适合希望把AI能力落地到小程序端、或需要完整项目练手的开发者参考。项目围绕语音交互与智能对话场景展开,涵盖首页、关于、个人中心、待办事项等页面模块,…

2026/10/9 13:50:42 阅读更多 →
LVDS信号完整性本质:差分电压判决与电流驱动范式

LVDS信号完整性本质:差分电压判决与电流驱动范式

1. 为什么LVDS不是“更快的TTL”,而是信号完整性思维的分水岭第一次在某高校实验室调试高速图像采集板时,我盯着示波器上那对差分线上微弱却稳定的200mV摆幅,足足愣了三分钟——它既不像TTL那样有明确的高/低电平阈值,也不像RS422…

2026/10/9 13:50:42 阅读更多 →
如何避免指令缺失?自然语言交互中要求明确性的关键作用

如何避免指令缺失?自然语言交互中要求明确性的关键作用

抱歉,我目前没有看到任何具体的“要求”内容。你提到的“上述要求”在当前对话上下文中并不存在——系统提示和开发者信息都是空的,你的消息中也只有这句提醒,没有附上实际需要遵守的规则、准则或任务内容。方便的话,请把需要我遵…

2026/10/9 13:50:42 阅读更多 →
微处理器深度解析:时钟电压、乱序执行与缓存一致性的硬核实践

微处理器深度解析:时钟电压、乱序执行与缓存一致性的硬核实践

1. 为什么今天还要啃透微处理器——从“看不见的齿轮”说起很多人第一次听说“微处理器”,是在中学信息技术课上,老师指着CPU芯片说:“这是电脑的大脑。”后来买电脑时,导购会报出“i5-12400F”“Ryzen 7 7800X3D”这些名字&#…

2026/10/9 13:50:42 阅读更多 →
机械制图中折断线与截断线的本质区别及CAD规范绘制

机械制图中折断线与截断线的本质区别及CAD规范绘制

1. 为什么机械制图里“折断线”总被问,却很少有人真搞懂它和“截断线”的区别?在机械制图一线干了十多年,带过几十个刚入行的绘图员、设计助理和高职实习生,几乎每届都会有人拿着图纸来问:“老师,这个波浪线…

2026/10/9 13:49:41 阅读更多 →

日新闻

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API这个话题,隔三差五就会在群里被翻出来讨论一次。上周还有个同事线上处理一个订单超时问题,排查到最后发现是ZonedDateTime序列化后时区丢了,用户在下单当天晚上看到的时间整整差了8个小时。这类问题几乎每个做Java开发的人都遇到过…

2026/10/9 0:00:49 阅读更多 →
EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

前几个月我手头有好几台机器需要互相访问:办公室台式机、家里 NAS、还有一台云主机。如果只是偶尔传个文件倒还好,问题是工作场景经常要在几处环境之间来回切换,每次都先登录跳板机再层层代理,实在折腾。我先后试过端口映射、自建…

2026/10/9 0:00:49 阅读更多 →
AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent 这个词在过去一年里被反复提及,但真正动手搭过一套能跑起来的 Agent 系统的人都知道,从"知道它是什么"到"让它稳定干活"之间隔着一整套工程决策。我前后参与过几个 Agent 项目的落地,从最初用现成框架拼装&…

2026/10/9 0:01:50 阅读更多 →

周新闻

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/8 15:26:32 阅读更多 →
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/8 15:26:40 阅读更多 →
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/9 10:11:06 阅读更多 →

月新闻

我发现了一个新思路:用 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/8 21:13:17 阅读更多 →
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/8 15:26:17 阅读更多 →
黑夜航拍船只数据集训练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/9 6:17:20 阅读更多 →