docker-selenium 浏览器镜像 Tag 体系全解析:以 Selenium Grid 4.29.0 + Chrome 100 为例
测试后端云原生容器编排可观测性【免费下载链接】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/archived/4.29.0/chrome_100.md 中记录的一次真实发布日志为切入点系统拆解 docker-selenium 项目中selenium/node-chrome与selenium/standalone-chrome镜像的 tag 命名规范、生成逻辑与使用方式。读者读完本文后将能够准确读懂任意CHANGELOG/*/chrome_*.md中的 tag 输出理解 tag_and_push_browser_images.sh 的源码实现并在实际测试中精确锁定所需版本的镜像 tag。背景一份归档日志的价值在 docker-selenium 项目中每一次浏览器镜像发布都会产生一份独立的 Markdown 记录保存在CHANGELOG/目录下按 Grid 版本归档。本文聚焦的CHANGELOG/archived/4.29.0/chrome_100.md就是 Selenium Grid4.29.0发布周期中为 Chrome100.0.4896.127生成镜像 tag 时的完整执行输出。它的原始内容如下./tag_and_push_browser_images.sh 4.29.0 20250303 selenium false chrome true Tagging images for browser chrome, version 4.29.0, build date 20250303, namespace selenium Selenium Grid version - 4.29.0-20250303 Chrome version - 100.0.4896.127 Short Chrome version - 100.0 ChromeDriver version - 100.0.4896.60 Short ChromeDriver version - 100.0 Tagged selenium/node-chrome:100.0.4896.127-chromedriver-100.0.4896.60-grid-4.29.0-20250303 Tagged selenium/standalone-chrome:100.0.4896.127-chromedriver-100.0.4896.60-grid-4.29.0-20250303 Tagged selenium/node-chrome:100.0.4896.127-chromedriver-100.0.4896.60-20250303 Tagged selenium/standalone-chrome:100.0.4896.127-chromedriver-100.0.4896.60-20250303 Tagged selenium/node-chrome:100.0.4896.127-20250303 Tagged selenium/standalone-chrome:100.0.4896.127-20250303 Tagged selenium/node-chrome:100.0-chromedriver-100.0-grid-4.29.0-20250303 Tagged selenium/standalone-chrome:100.0-chromedriver-100.0-grid-4.29.0-20250303 Tagged selenium/node-chrome:100.0-chromedriver-100.0-20250303 Tagged selenium/standalone-chrome:100.0-chromedriver-100.0-20250303 Tagged selenium/node-chrome:100.0-20250303 Tagged selenium/standalone-chrome:100.0-20250303这份输出表面看只是一串docker tag的日志但它实际上完整展示了整个项目的镜像 tag 发布体系一次发布如何以Grid 版本 构建日期为基准镜像selenium/node-chrome:4.29.0-20250303在容器内探测真实的 Chrome 与 ChromeDriver 版本再为node-chrome与standalone-chrome两类镜像批量打上 12 个加上未展示的 4 个旧版本 tag共 16 个可读性 tag。这正是 docker-selenium 让跨浏览器测试与版本锁定变得容易的核心机制——正如 CHANGELOG/README.md 所述其动机是在提供最新 Selenium Grid 核心能力的同时让用户能够按浏览器版本精确拉取镜像进行测试。从命令看参数一条命令如何驱动整次发布日志第一行就是整次发布的入口./tag_and_push_browser_images.sh 4.29.0 20250303 selenium false chrome true对照 tag_and_push_browser_images.sh 的脚本头部的参数声明这 6 个位置参数分别对应参数示例值含义$1VERSION4.29.0Selenium Grid 版本号$2BUILD_DATE20250303构建日期YYYYMMDD$3NAMESPACEselenium镜像命名空间即 registry 用户名$4PUSH_IMAGEfalse是否推送镜像到 registry默认 false仅本地打 tag$5BROWSERchrome浏览器类型支持 chrome / chromium / edge / firefox / chrome-for-testing$6RELEASE_OLD_VERSIONtrue是否为发布旧版本影响是否生成不带构建日期的短 tag$7PLATFORM默认linux/amd64构建平台仅在 chrome 与 chrome-for-testing 分支中用于指定运行平台脚本首先组合出基准版本号TAG_VERSION${VERSION}-${BUILD_DATE}即日志中第二行显示的Selenium Grid version - 4.29.0-20250303。值得注意的是脚本第 16 行NAMESPACE${NAME:-selenium}表明命名空间实际上优先读取$NAME环境变量命令行参数$3只是兜底默认值。在 Makefile 中tag_and_push_browser_images目标是五个浏览器系列发布的聚合入口它会依次调用脚本处理chrome、chrome-for-testing、chromium、edge、firefox五个分支单独的tag_and_push_chrome_images目标则只处理 Chrome 一个系列tag_and_push_chrome_images: ./tag_and_push_browser_images.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) $(PUSH_IMAGE) chrome $(RELEASE_OLD_VERSION)版本探测在容器内问出真实版本号tag_and_push_browser_images.sh的关键设计是tag 中记录的浏览器与驱动版本并非人工填写而是从已构建好的基准镜像中实时探测得到的。以 chrome 分支为例tag_and_push_browser_images.shCHROME_VERSION$(docker run --platform ${PLATFORM} --rm ${NAMESPACE}/node-chrome:${TAG_VERSION} google-chrome --version | awk {print $3}) CHROMEDRIVER_VERSION$(docker run --platform ${PLATFORM} --rm ${NAMESPACE}/node-chrome:${TAG_VERSION} chromedriver --version | awk {print $2})即用docker run --rm临时启动selenium/node-chrome:4.29.0-20250303分别在容器内执行google-chrome --version与chromedriver --version再用awk截取版本号字段得到本文日志中的Chrome version - 100.0.4896.127与ChromeDriver version - 100.0.4896.60。之后通过short_version()函数tag_and_push_browser_images.sh截取主次版本function short_version() { local __long_version$1 local __version_split(${__long_version//./ }) echo ${__version_split[0]}.${__version_split[1]} }它按.切分版本字符串后取前两段因此100.0.4896.127变为100.0100.0.4896.60也变为100.0对应日志中Short Chrome version - 100.0与Short ChromeDriver version - 100.0。Tag 命名规范六种组合的完整语义将完整版本与短版本、Grid 版本与构建日期排列组合脚本在CHROME_TAGS数组中定义了 6 种 tag 形态tag_and_push_browser_images.shTag 形态示例本文日志语义${CHROME_VERSION}-chromedriver-${CHROMEDRIVER_VERSION}-grid-${TAG_VERSION}100.0.4896.127-chromedriver-100.0.4896.60-grid-4.29.0-20250303完整浏览器版本 完整驱动版本 完整 Grid 版本 构建日期最精确、信息最全的 tag${CHROME_VERSION}-chromedriver-${CHROMEDRIVER_VERSION}-${BUILD_DATE}100.0.4896.127-chromedriver-100.0.4896.60-20250303完整浏览器版本 完整驱动版本 构建日期${CHROME_VERSION}-${BUILD_DATE}100.0.4896.127-20250303完整浏览器版本 构建日期${CHROME_SHORT_VERSION}-chromedriver-${CHROMEDRIVER_SHORT_VERSION}-grid-${TAG_VERSION}100.0-chromedriver-100.0-grid-4.29.0-20250303短浏览器版本 短驱动版本 完整 Grid 版本 构建日期${CHROME_SHORT_VERSION}-chromedriver-${CHROMEDRIVER_SHORT_VERSION}-${BUILD_DATE}100.0-chromedriver-100.0-20250303短浏览器版本 短驱动版本 构建日期${CHROME_SHORT_VERSION}-${BUILD_DATE}100.0-20250303短浏览器版本 构建日期当RELEASE_OLD_VERSIONfalse时即发布新版本脚本还会额外追加 4 个不含构建日期的浮动 tagtag_and_push_browser_images.sh它们会随未来版本更新而指向更新的镜像方便用户不关心具体构建日期时快速引用${CHROME_VERSION}-chromedriver-${CHROMEDRIVER_VERSION}${CHROME_VERSION}${CHROME_SHORT_VERSION}-chromedriver-${CHROMEDRIVER_SHORT_VERSION}${CHROME_SHORT_VERSION}本文场景中RELEASE_OLD_VERSIONtrue因此这些浮动 tag 被跳过这与归档日志只输出 12 行Tagged记录的现象完全吻合。这些 tag 与 docs/docker-hub/node-chrome.md 中描述的通用约定一致镜像名selenium/node-chrome或selenium/standalone-chrome后依次可跟Major.Minor.Patch、YYYYMMDD、浏览器版本与 ChromeDriver 版本的任意排列组合使用者可以从中选择最简可用或完全锁定的任意粒度。从 tag 到镜像node-chrome 与 standalone-chrome 的分工日志中每一个 tag 都同时打在两类镜像上selenium/node-chrome与selenium/standalone-chrome这对应脚本末尾的循环tag_and_push_browser_images.shfor chrome_tag in ${CHROME_TAGS[]}; do retag node-chrome ${chrome_tag} retag standalone-chrome ${chrome_tag} done两类镜像的角色差异在源码中清晰可见node-chrome基于 NodeBase/Dockerfile 构建的节点镜像作为 Selenium Grid 的 Node 使用通过SE_EVENT_BUS_HOST等环境变量连接 Hub/EventBus 注册自身。Chrome 与 ChromeDriver 的安装逻辑集中在 NodeChrome/Dockerfile其中google-chrome --version | awk {print $3}的写法第 70 行正是 tag 脚本中版本探测命令的同源实现。standalone-chrome基于 Standalone/Dockerfile 构建将 Grid 服务端Router、Distributor、SessionMap 等与浏览器打包在同一个容器中适合单机独立运行测试不需要外部 Hub。retag函数tag_and_push_browser_images.sh在常规路径下执行docker tag并在PUSH_IMAGEtrue时附带docker push。此外它支持PROMOTE_TAGStrue的发布晋升模式当发布直接用测试通过的镜像而不重建时使用docker buildx imagetools create在 registry 层直接创建多架构 manifest 别名避免docker pull只能拉回单架构镜像的问题若同时设置了PROMOTE_GHCR_NAMESPACE则在同一调用中镜像到 GHCR。这也解释了为什么归档日志中的命令使用false——它只是本地打 tag 的演练/记录真正的推送由 CI 发布流程控制。实战用这些 tag 锁定浏览器版本理解了 tag 体系后实际使用就非常直观。以本文的 Chrome 100 为例在 CHANGELOG/README.md 的 Chrome 版本矩阵表中Grid4.29.0行与 Chrome100列交汇处的✓正指向本文这份日志。若你的测试环境需要精确锁定 Chrome100.0.4896.127与 ChromeDriver100.0.4896.60可以按信息完整度递减选择 tag# 完全锁定浏览器 驱动 Grid 版本 构建日期 docker pull selenium/standalone-chrome:100.0.4896.127-chromedriver-100.0.4896.60-grid-4.29.0-20250303 # 锁定浏览器与驱动、忽略 Grid 补丁号 docker pull selenium/node-chrome:100.0.4896.127-chromedriver-100.0.4896.60 # 只锁定大版本 docker pull selenium/standalone-chrome:100.0作为 Node 使用并连接 Hub 时参考 docs/docker-hub/node-chrome.mddocker network create grid docker run -d -p 4442-4444:4442-4444 --net grid --name selenium-hub selenium/hub:4.29.0-20250303 docker run -d --net grid -e SE_EVENT_BUS_HOSTselenium-hub --shm-size2g \ selenium/node-chrome:100.0.4896.127-chromedriver-100.0.4896.60-grid-4.29.0-20250303需要特别说明的是正如 CHANGELOG/README.md 的 Note 所述项目并未对每个 Grid 版本与浏览器版本的组合做完整的功能回归测试用户应根据自己的测试需求评估并选择 tag。这也正是按浏览器版本归档 changelog的意义——当某个浏览器版本存在已知问题时可以方便地回溯并锁定到其上一版本而不是被迫跟随最新版。小结一份看似只有命令输出的归档日志实际上浓缩了 docker-selenium 浏览器镜像发布的完整链路命令行参数驱动 → 容器内版本探测 → 六种 tag 形态排列组合 → node/standalone 双镜像同步打标。通过本文的源码级拆解读者现在可以读懂任意CHANGELOG归档中的 tag 输出并反推其发布参数理解 tag_and_push_browser_images.sh 的完整执行流程与RELEASE_OLD_VERSION、PROMOTE_TAGS等开关的作用根据测试需求在最精确锁定与最简引用之间选择合适的镜像 tag。当你在跨浏览器测试中需要固定某一代 Chrome 版本、或排查某个浏览器版本特有的兼容问题时这套 tag 体系就是 docker-selenium 提供给你的版本管理工具。赞分享测试后端云原生容器编排可观测性【免费下载链接】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 浏览器镜像打标与发布流程全解析以 Selenium Grid 4.29.0 Chrome 119 为例docker selenium 浏览器镜像打标与发布流程全解析以 Selenium Grid 4.29.0 Chrome 119 为例 本篇技术指南围绕仓测试后端云原生容器编排可观测性理解 docker-selenium 浏览器镜像标签体系以 Chrome 103 与 Selenium Grid 4.29.0 的归档记录为例理解 docker selenium 浏览器镜像标签体系以 Chrome 103 与 Selenium Grid 4.29.0 的归档记录为例 本文将围绕 d测试后端云原生容器编排可观测性KernelSU ksud 完整实战指南如何部署、安装并跑通全部常用命令KernelSU ksud 完整实战指南如何部署、安装并跑通全部常用命令 ksudKernelSU Daemon是 KernelSU 体系里连接内核与用户测试后端云原生容器编排可观测性上一篇3步掌握Krita AI Diffusion释放你的数字创作潜能下一篇3分钟快速上手Krita AI Diffusion插件完整使用指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

CoreDNS transfer 插件实战指南:为权威插件提供出站区域传输(AXFR/IXFR)与 NOTIFY 通知

CoreDNS transfer 插件实战指南:为权威插件提供出站区域传输(AXFR/IXFR)与 NOTIFY 通知

后端网络云原生 【免费下载链接】coredns CoreDNS is a DNS server that chains plugins 项目地址: https://gitcode.com/gh_mirrors/co/coredns 点击查看 免费下载 导读 transfer 是 CoreDNS 中负责出站区域传输(outgoing zone transfer)的…

2026/10/5 13:06:59 阅读更多 →
脱敏数据会被还原吗:安当DBG 的重标识风险治理

脱敏数据会被还原吗:安当DBG 的重标识风险治理

一、引言:为什么"脱敏过"的数据仍然危险 很多团队在百度搜索"脱敏方案"时,潜意识里把"做脱敏"等同于"数据已安全"。但真实世界里反复出现这样的场景:一张客户表对手机号做了掩码、对姓名做了替换&am…

2026/10/5 13:06:59 阅读更多 →
OpenCore Legacy Patcher 完整实操:老 Mac 装新版 macOS 的最短路径

OpenCore Legacy Patcher 完整实操:老 Mac 装新版 macOS 的最短路径

OpenCore Legacy Patcher 完整实操:老 Mac 装新版 macOS 的最短路径 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 这篇文章教你把想装的最新版 …

2026/10/5 13:05:59 阅读更多 →

最新新闻

插件加载失败怎么排查?从IAR到Harness,一次讲透插件机制与修复方法

插件加载失败怎么排查?从IAR到Harness,一次讲透插件机制与修复方法

前阵子一个朋友给我转来一长串截图,全是同一个主题: harness failed to load plugins web boot: 2 entries did not activate 。扫一眼没头没尾,但类似的报错我在不同工具里见过太多次了。紧接着嵌入式群又有人问“iar plugins 是干什么的”…

2026/10/5 13:49:17 阅读更多 →
Oracle rownum迁移到瀚高数据库的SQL改写指南

Oracle rownum迁移到瀚高数据库的SQL改写指南

做oracle到瀚高数据库迁移的时候,SQL改写是最躲不开的一关。我接手过不少迁移项目,真正让开发同学头疼的往往不是那些复杂分析函数,反而是rownum这种看似不起眼、Oracle独有的伪列——改不对,轻则结果集多几行,重则分页…

2026/10/5 13:49:17 阅读更多 →
头盔护目镜耐穿透试验机|国标 GB/T811 头盔镜片冲击强度检测设备

头盔护目镜耐穿透试验机|国标 GB/T811 头盔镜片冲击强度检测设备

1. 概述头盔护目镜耐穿透试验机是骑行头盔安全性能专项检测设备,用于电动自行车头盔、摩托车头盔护目镜的冲击强度测试。 试验核心判定要求:护目镜经受冲击发生破碎时,不得产生角度小于 60 的碎片,防止尖锐碎片划伤骑行者眼部。2.…

2026/10/5 13:49:17 阅读更多 →
SolidWorks拉伸切除失败的五大根因与排查技巧

SolidWorks拉伸切除失败的五大根因与排查技巧

做了这么多年SolidWorks相关的工作,也带过不少新人刷练习题,我越来越觉得,练习题的含金量往往不在于题目本身有多复杂,而在于它能不能逼你把某个隐藏的坑踩一遍。就拿这几天好几个朋友都在问的问题来讲——为什么有时拉伸切除会执…

2026/10/5 13:49:17 阅读更多 →
量化LLM微调工具实战:QLoRA单卡跑通7B模型与避坑指南

量化LLM微调工具实战:QLoRA单卡跑通7B模型与避坑指南

简介:这份资源是面向大语言模型微调研究者与工程实践者的QLoRA量化微调工具包,聚焦在有限显存条件下对LLM进行高效适配训练,适合具备一定深度学习基础、希望将模型落地到具体任务的中高级开发者。压缩包共274个文件,约50.81MB&…

2026/10/5 13:49:17 阅读更多 →
MySQL JSON类型完全指南:从函数使用到索引优化与JSON_TABLE实战

MySQL JSON类型完全指南:从函数使用到索引优化与JSON_TABLE实战

MySQL 的 JSON 数据类型从 5.7 引入到现在快十年了,但我在实际项目里见到的大量用法,还停留在“把 JSON 塞进 TEXT 字段,查询时全表捞出来再用程序解析”这种原始阶段。等到数据量上来、接口响应变慢、想按 JSON 里的某个字段过滤却没法走索引…

2026/10/5 13:48:17 阅读更多 →

日新闻

马斯克杀回智能体战场,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 阅读更多 →