docker-selenium 4.48.0 发布解析:Firefox 134.0.2 + GeckoDriver 0.37.1 镜像标签生成全流程
测试后端云原生容器编排可观测性【免费下载链接】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/4.48.0/firefox_134.md 记录的发布日志为主体深入讲解 docker-selenium 项目在发布 Firefox 浏览器镜像时如何通过 tag_and_push_browser_images.sh 自动探测浏览器与驱动版本、组合生成 20 个镜像标签并完成打标/推送。读完本文你将掌握该脚本 6 个位置参数的含义、标签命名规则含精简版与完整版的差异、docker tag与docker buildx imagetools两条打标路径的取舍以及node-firefox/standalone-firefox镜像的构建与使用方式。一、一条发布日志记录了什么firefox_134.md 全文是一段脚本执行日志记录了一次真实的 Firefox 浏览器镜像发布过程./tag_and_push_browser_images.sh 4.48.0 20260909 selenium false firefox true Tagging images for browser firefox, version 4.48.0, build date 20260909, namespace selenium Selenium Grid version - 4.48.0-20260909 Firefox version - 134.0.2 Short Firefox version - 134.0 GeckoDriver version - 0.37.1 Short GeckoDriver version - 0.37 Tagged selenium/node-firefox:134.0.2-geckodriver-0.37.1-grid-4.48.0-20260909 Tagged selenium/standalone-firefox:134.0.2-geckodriver-0.37.1-grid-4.48.0-20260909 ...这段日志包含了四个关键事实信息值来源Selenium Grid 版本4.48.0-20260909第一个参数4.48.0与第二个参数20260909拼接Firefox 版本134.0.2短版本 134.0脚本在容器内执行firefox --version探测GeckoDriver 版本0.37.1短版本 0.37脚本在容器内执行geckodriver --version探测命名空间selenium第三个参数日志中一共输出了 20 行Taggednode-firefox 与 standalone-firefox 各 10 个标签对应脚本中对node-firefox和standalone-firefox两个镜像执行的两轮相同打标循环。这段日志本质上是对 tag_and_push_browser_images.sh 中 firefox 分支的一次真实运行回放。二、脚本位置参数逐一解析脚本前 9 行定义了全部可配置输入tag_and_push_browser_images.shVERSION$1 # 例如 4.48.0Selenium Grid 发布版本 BUILD_DATE$2 # 例如 20260909构建日期YYYYMMDD NAMESPACE$3 # 例如 selenium镜像命名空间 PUSH_IMAGE${4:-false} # 是否 push默认 false BROWSER$5 # firefox / chrome / chromium / edge / chrome-for-testing RELEASE_OLD_VERSION${6:-false} # 是否同时为旧版本打标签默认 false PLATFORM${7:-linux/amd64} # 探测版本时使用的平台默认 linux/amd64对应日志首行命令./tag_and_push_browser_images.sh 4.48.0 20260909 selenium false firefox true即VERSION4.48.0、BUILD_DATE20260909、NAMESPACEselenium、PUSH_IMAGEfalse、BROWSERfirefox、RELEASE_OLD_VERSIONtrue。注意日志中的true是第 6 个参数意味着本次发布没有额外生成不带grid/构建日期的老式兼容标签详见第四节。此外还有两个由环境变量控制的选项PROMOTE_TAGS默认 falsetrue 时表示镜像已在测试阶段构建并推送过发布阶段只做 registry 之间的标签搬运不再重新构建PROMOTE_GHCR_NAMESPACE默认空设置后在同一次调用中同步镜像到 GHCR 命名空间。项目通过 Makefile 将这些参数包装成目标例如tag_and_push_firefox_images目标实际执行的就是与日志相同的调用tag_and_push_firefox_images: ./tag_and_push_browser_images.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) $(PUSH_IMAGE) firefox $(RELEASE_OLD_VERSION)三、版本探测在容器内读取真实版本打标前脚本需要知道镜像里实际装的 Firefox 与 GeckoDriver 版本而不是依赖外部元数据。firefox 分支的做法是tag_and_push_browser_images.shFIREFOX_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})它先以selenium/node-firefox:4.48.0-20260909为镜像运行临时容器分别执行firefox --version与geckodriver --version再用awk提取第三列/第一行第二列得到精确版本号。随后通过short_version()函数tag_and_push_browser_images.sh截取主版本.次版本作为短版本function short_version() { local __version_split(${__long_version//./ }) echo ${__version_split[0]}.${__version_split[1]} }于是 134.0.2 → 134.00.37.1 → 0.37。chromium、chrome、edge 分支采用同样的容器内探测模式只是命令与 awk 列位不同这正是标签永远与镜像真实内容一致的保证。四、标签命名规则20 个标签从哪来以日志中 Firefox 134.0.2 / GeckoDriver 0.37.1 为例FIREFOX_TAGS数组共 10 个标签tag_and_push_browser_images.sh随后对node-firefox与standalone-firefox各打一遍共 20 个FIREFOX_TAGS( # 完整版浏览器驱动Grid日期 ${FIREFOX_VERSION}-geckodriver-${GECKODRIVER_VERSION}-grid-${TAG_VERSION} # 浏览器驱动日期 ${FIREFOX_VERSION}-geckodriver-${GECKODRIVER_VERSION}-${BUILD_DATE} # 浏览器日期 ${FIREFOX_VERSION}-${BUILD_DATE} # 短版本浏览器驱动Grid日期 ${FIREFOX_SHORT_VERSION}-geckodriver-${GECKODRIVER_SHORT_VERSION}-grid-${TAG_VERSION} # 浏览器驱动日期短版本 ${FIREFOX_SHORT_VERSION}-geckodriver-${GECKODRIVER_SHORT_VERSION}-${BUILD_DATE} # 浏览器日期短版本 ${FIREFOX_SHORT_VERSION}-${BUILD_DATE} )其中TAG_VERSION${VERSION}-${BUILD_DATE}即4.48.0-20260909。将变量代入后得到日志中的前 6 个标签例如selenium/node-firefox:134.0.2-geckodriver-0.37.1-grid-4.48.0-20260909 selenium/node-firefox:134.0.2-geckodriver-0.37.1-20260909 selenium/node-firefox:134.0.2-20260909 selenium/node-firefox:134.0-geckodriver-0.37-grid-4.48.0-20260909 selenium/node-firefox:134.0-geckodriver-0.37-20260909 selenium/node-firefox:134.0-202609094.1 RELEASE_OLD_VERSION 控制下的兼容标签当第 6 个参数为false时tag_and_push_browser_images.sh数组会追加 4 个不带 Grid 版本与构建日期的标签FIREFOX_TAGS( ${FIREFOX_VERSION}-geckodriver-${GECKODRIVER_VERSION} # 134.0.2-geckodriver-0.37.1 ${FIREFOX_VERSION} # 134.0.2 ${FIREFOX_SHORT_VERSION}-geckodriver-${GECKODRIVER_SHORT_VERSION} # 134.0-geckodriver-0.37 ${FIREFOX_SHORT_VERSION} # 134.0 )这是为兼容旧版使用习惯而保留的简化标签。仓库 CI 中的 tests/build-backward-compatible/bootstrap.sh 会以RELEASE_OLD_VERSIONtrue运行并校验这些旧标签仍可正常解析防止向后兼容性回归。而 firefox_134.md 日志中第 6 个参数为true因此只输出了前 6 组每组两个镜像共 12 行Tagged日志实际 20 行是包含了完整 10 个标签的输出说明该日志对应RELEASE_OLD_VERSIONfalse的完整发布路径。五、打标与推送docker tag 与 buildx imagetools 两条路径retag()函数tag_and_push_browser_images.sh是打标的核心它根据PROMOTE_TAGS走两条完全不同的路径常规路径本地镜像打标docker tag ${NAMESPACE}/${__image}:${TAG_VERSION} ${NAMESPACE}/${__image}:${__tag} if [ ${PUSH_IMAGE} true ]; then docker push ${NAMESPACE}/${__image}:${__tag} fi先以TAG_VERSION为源标签docker tag出目标标签再按需docker push。日志中PUSH_IMAGEfalse因此只执行了打标未推送。发布晋升路径registry 间打标docker buildx imagetools create ${__targets[]} ${__source}当PROMOTE_TAGStrue时镜像已在此前测试阶段构建并发布过本轮只是把测试验证过的 manifest 打上发布标签不再重新构建。脚本注释明确指出此时本地 Docker 存储是空的docker pull只能拉取当前架构而docker buildx imagetools直接基于 manifest index 在 registry 之间操作可以完整保留多架构特性。若设置了PROMOTE_GHCR_NAMESPACE会在同一次调用中额外为目标仓库GHCR也创建同样的标签。六、Firefox 镜像的构建内容从 Dockerfile 看镜像内部被docker run探测版本的node-firefox镜像其内容由 NodeFirefox/Dockerfile 定义它基于node-base构建主要包含三部分1. Firefox 安装逻辑。通过FIREFOX_VERSION、FIREFOX_DOWNLOAD_URL、FIREFOX_LANG_VERSION三个构建参数控制NodeFirefox/Dockerfile对latest/beta-latest/nightly-latest/devedition-latest/esr-latest走 apt 安装调用 install-firefox-apt.sh对具体版本号如 134.0.2走 Mozilla CDN 下载.deb或.tar.bz2包再由 install-firefox-package.sh 完成安装.deb直接apt-get install.tar.bz2/.tar.xz解压到/opt/firefox-${FIREFOX_VERSION}并软链到/usr/bin/firefox安装后调用 get_lang_package.sh 下载语言包最后apt-get upgrade修复依赖 CVE。2. GeckoDriver 安装NodeFirefox/Dockerfile默认GECKODRIVER_VERSIONlatest时通过 GitHub release 重定向探测最新版本号按架构下载geckodriver-${GK_VERSION}-linux64或linux-aarch64包解压到/opt/geckodriver-$GK_VERSION并软链为/usr/bin/geckodriver。3. 浏览器信息导出NodeFirefox/Dockerfile构建时把firefox名称、版本号和moz:firefoxOptions.binary模板写入/opt/selenium/browsers/firefox/目录供 Selenium Grid 节点启动时生成 capability 配置。七、如何使用这两个镜像运行 Firefox 自动化日志中打标的node-firefox与standalone-firefox对应两种运行形态仓库在 docs/docker-hub/node-firefox.md 给出了完整示例。Node 模式接入 Hub 组成分布式 Griddocker 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_HOSTselenium-hub \ --shm-size2g \ selenium/node-firefox:134.0.2-geckodriver-0.37.1-grid-4.48.0-20260909Standalone 模式单容器内含完整 Grid暴露 4442-4444 端口docker run -d -p 4442-4444:4442-4444 --shm-size2g \ selenium/standalone-firefox:134.0.2-geckodriver-0.37.1-grid-4.48.0-20260909浏览器容器务必使用--shm-size2g以提供足够的共享内存docs 中明确提示。随后将 WebDriver 测试指向http://localhost:4444即可可选地通过http://localhost:7900/?autoconnect1resizescalepasswordsecretVNC观察容器内浏览器。仓库根目录的 docker-compose-v3.yml 提供了用 Compose 编排 Hub/Node 的现成模板只需将镜像 tag 替换为本篇解析的完整版本即可锁定浏览器与 Grid 版本。八、发布流程中的位置从 CHANGELOG 到测试验证CHANGELOG/4.48.0 目录下每个浏览器版本如 firefox_153.md都对应一份同格式的发布日志说明每个版本都经过同一套脚本的完整打标流程。在项目发布流水线中构建并测试node-firefox/standalone-firefox等镜像由 Makefile 的tag_and_push_firefox_images目标调用本脚本完成多标签生成与推送tests/build-backward-compatible/bootstrap.sh 以RELEASE_OLD_VERSIONtrue复跑打标并验证旧式标签可用各浏览器标签生成完毕后tag_and_push_browser_images汇总目标Makefile确保五种浏览器chrome、chrome-for-testing、chromium、edge、firefox标签齐全再由tag_and_push_browser_images_ghcrMakefile把本地存在的全部标签镜像同步到 GHCR。九、总结firefox_134.md 虽短却是理解 docker-selenium 浏览器镜像发布机制的浓缩入口一条命令即完成了容器内版本探测 → 短版本截取 → 10 个标签组合 → 双镜像打标的完整闭环。实际使用时你既可以用selenium/node-firefox:134.0.2-geckodriver-0.37.1-grid-4.48.0-20260909这类完整标签精确定位一个不可变的镜像组合也可以用selenium/node-firefox:134.0这类短标签获得同主版本内的最新发布选择哪种取决于你对版本可控性与更新便利性的权衡。赞分享测试后端云原生容器编排可观测性【免费下载链接】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点击查看免费下载相关推荐N_m3u8DL-RE 完整指南一条命令搞定 DASH、HLS 与直播录制N_m3u8DL RE 完整指南一条命令搞定 DASH、HLS 与直播录制 N_m3u8DL RE 是一款跨平台的流媒体下载工具一条命令即可下载 DASH测试后端云原生容器编排可观测性docker-selenium 4.48.0 发布记录Firefox 118.0.2 与 GeckoDriver 0.37.1 镜像标签体系全解析docker selenium 4.48.0 发布记录Firefox 118.0.2 与 GeckoDriver 0.37.1 镜像标签体系全解析 本文基于测试后端云原生容器编排可观测性Primer CSS 标签系统实战指南labels bundle 的引入、构建与 IssueLabel 样式解析Primer CSS 标签系统实战指南 labels bundle 的引入、构建与 IssueLabel 样式解析 导读 本文以 Primer CSS 仓库中测试后端云原生容器编排可观测性上一篇GitHub_Trending/fron/frontend模块化开发提高救援系统代码可维护性下一篇5个AI技能让你的Obsidian笔记效率提升300%创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

EMC近场探头选型与使用方法深度解析

EMC近场探头选型与使用方法深度解析

1. 为什么EMC近场探头不能“随便买一个就用”?——从三类探头实测数据看诊断失效的根源EMC近场探头不是万用表,更不是示波器探头那种“插上就能读数”的通用工具。它本质上是一套高度定制化的电磁场传感器系统,其物理结构、材料介电特性、阻抗…

2026/10/5 10:48:40 阅读更多 →
LabVIEW中TDMS数据落盘实战:从基础写入到工程优化

LabVIEW中TDMS数据落盘实战:从基础写入到工程优化

说起LabVIEW里的数据落盘,我的第一反应就是TDMS。接触LabVIEW的前几年,我也试过用文本文件、Excel表格直接存测试数据,结果在长时间采集项目里被折磨得够呛:文件越来越大、写入越来越慢、半路断电丢数据,最痛苦的是采集…

2026/10/5 11:46:56 阅读更多 →
场景化AI Agent落地实战:从RAG知识库到私有化部署的工程指南

场景化AI Agent落地实战:从RAG知识库到私有化部署的工程指南

1. 场景化AI Agent到底在解决什么问题1.1 从"通用聊天"到"业务智能体"的认知转变过去两年,大模型最普遍的用法就是打开一个对话框,输入问题,得到一段回答。这种模式在写文案、查资料、做翻译时确实好用,但一旦…

2026/10/5 10:29:17 阅读更多 →

最新新闻

隔离内网AI Agent落地方案:从模型选型到并发压测全指南

隔离内网AI Agent落地方案:从模型选型到并发压测全指南

把 AI Agent 推进隔离内网的时候,我最直观的感受是:网上那些 Agent 演示项目,到了内网几乎没有一个能直接跑起来。这不是代码写得不行,而是它们默认的世界里什么都有——模型权重从 HuggingFace 拉、Python 依赖从 PyPI 装、搜索工…

2026/10/5 14:40:16 阅读更多 →
本地部署大模型:Token自由与数据主权的成本交叉点

本地部署大模型:Token自由与数据主权的成本交叉点

1. 从一张显卡账单说起:为什么企业开始重新算这笔账去年底帮一家做工业质检的客户做技术选型,他们的场景很典型:每天要处理大约两万张缺陷样本图,每张图都要过一遍多模态模型做描述生成和分类打标。一开始走的是公有云API&#xf…

2026/10/5 14:40:16 阅读更多 →
Windows下TensorFlow GPU版安装指南:CUDA与cuDNN版本匹配全解析

Windows下TensorFlow GPU版安装指南:CUDA与cuDNN版本匹配全解析

1. 写在动手之前:TensorFlow GPU版本没那么玄,坑全在版本匹配TensorFlow装GPU版本,十个新手九个在环境上翻车。这活儿本身不复杂,但坑全藏在版本匹配里:显卡驱动、CUDA、cuDNN、Python、TensorFlow本体,五个…

2026/10/5 14:40:16 阅读更多 →
Windows安装TensorFlow GPU版全攻略:CUDA/cuDNN版本匹配与报错排查

Windows安装TensorFlow GPU版全攻略:CUDA/cuDNN版本匹配与报错排查

Windows上装TensorFlow GPU版,说实话不算难,但坑是真的多。很多朋友卡在最后一步,pip install成功,import的时候直接报错,日志里全是什么cudart64_110.dll、cublas64_11.dll找不到,一看就是CUDA和cuDNN版本…

2026/10/5 14:40:15 阅读更多 →
Python登录接口实战:从密码加密到Session/Token登录态保持

Python登录接口实战:从密码加密到Session/Token登录态保持

做登录接口,算是Python后端入门里最典型、也最容易被低估的一个练习。项目名里带着“携程登陆”,说明不少人是想拿真实网站当靶子练手,这个思路没错,但我的建议是:先别急着去模拟别人家的登录,先自己用Pyth…

2026/10/5 14:40:15 阅读更多 →
零售数仓实战:促销敏感度与评论敏感度建模全解析

零售数仓实战:促销敏感度与评论敏感度建模全解析

做了不少零售行业的数仓项目,说实话,像“促销敏感度”和“评论敏感度”这类需求,几乎每个做电商或品牌方数据团队都会接到。老板们通常不会直接说“我要建个模型”,而是扔过来几个很现实的问题:为什么这波满减发出去&a…

2026/10/5 14:39:14 阅读更多 →

日新闻

马斯克杀回智能体战场,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/5 5:06:42 阅读更多 →
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/5 3:06:17 阅读更多 →

月新闻

我发现了一个新思路:用 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 阅读更多 →