news 2026/10/9 5:08:50

docker-selenium 镜像标签生成机制解读:以 Selenium Grid 4.33.0 + Chrome 119 发布记录为例

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
docker-selenium 镜像标签生成机制解读:以 Selenium Grid 4.33.0 + Chrome 119 发布记录为例
  • 测试
  • 后端
  • 云原生
  • 容器编排
  • 可观测性

【免费下载链接】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 仓库CHANGELOG/archived/4.33.0/chrome_119.md这份 Chrome 119 发布记录展开,系统讲解 Selenium Grid 容器镜像"浏览器版本 + 驱动版本 + Grid 版本 + 构建日期"多维标签的生成原理、脚本参数语义与实战选型方法。读完本文,你将能够读懂仓库中每一份chrome_xxx.md发布日志,理解 tag_and_push_browser_images.sh 的完整执行流程,并学会为selenium/node-chrome与selenium/standalone-chrome精确挑选固定版本的镜像标签。

发布记录文档是什么

CHANGELOG/archived/4.33.0/chrome_119.md是 docker-selenium 仓库"浏览器版本 × Grid 版本"矩阵(见 CHANGELOG/README.md)中的一个条目:它记录了 Selenium Grid4.33.0(构建日期20250606)这个发行版中,Chrome119系列镜像被打上哪些标签并发布到selenium命名空间的全过程。

该文档正文即一次真实脚本执行的完整回显:

./tag_and_push_browser_images.sh 4.33.0 20250606 selenium false chrome true Tagging images for browser chrome, version 4.33.0, build date 20250606, namespace selenium Selenium Grid version -> 4.33.0-20250606 Chrome version -> 119.0.6045.199 Short Chrome version -> 119.0 ChromeDriver version -> 119.0.6045.105 Short ChromeDriver version -> 119.0 Tagged selenium/node-chrome:119.0.6045.199-chromedriver-119.0.6045.105-grid-4.33.0-20250606 Tagged selenium/standalone-chrome:119.0.6045.199-chromedriver-119.0.6045.105-grid-4.33.0-20250606 Tagged selenium/node-chrome:119.0.6045.199-chromedriver-119.0.6045.105-20250606 Tagged selenium/standalone-chrome:119.0.6045.199-chromedriver-119.0.6045.105-20250606 Tagged selenium/node-chrome:119.0.6045.199-20250606 Tagged selenium/standalone-chrome:119.0.6045.199-20250606 Tagged selenium/node-chrome:119.0-chromedriver-119.0-grid-4.33.0-20250606 Tagged selenium/standalone-chrome:119.0-chromedriver-119.0-grid-4.33.0-20250606 Tagged selenium/node-chrome:119.0-chromedriver-119.0-20250606 Tagged selenium/standalone-chrome:119.0-chromedriver-119.0-20250606 Tagged selenium/node-chrome:119.0-20250606 Tagged selenium/standalone-chrome:119.0-20250606

这份输出同时揭示了三个关键信息:本次发布的组件版本组合(Chrome 119.0.6045.199 + ChromeDriver 119.0.6045.105)、标签命名规则(长短版本双轨制)、以及发布策略(RELEASE_OLD_VERSION=true时仅打带日期的标签)。

脚本参数逐项解析

执行命令的第一行./tag_and_push_browser_images.sh 4.33.0 20250606 selenium false chrome true对应脚本头部(tag_and_push_browser_images.sh)定义的 7 个位置参数:

参数位变量名本次取值含义
$1VERSION4.33.0Selenium Grid 主版本号
$2BUILD_DATE20250606构建日期(YYYYMMDD)
$3NAMESPACEselenium镜像仓库命名空间
$4PUSH_IMAGEfalse是否执行docker push
$5BROWSERchrome浏览器类型
$6RELEASE_OLD_VERSIONtrue是否为旧版本浏览器补发标签
$7PLATFORM(缺省)构建平台,默认linux/amd64

脚本先将VERSION与BUILD_DATE拼接为完整的 Grid 版本标识TAG_VERSION=4.33.0-20250606(脚本第 15 行),后续所有探针命令与标签均基于该标识展开。PUSH_IMAGE=false意味着本次执行只打标签不推送,因此发布记录中没有任何docker push输出;实际推送由 CI 流程以PUSH_IMAGE=true再执行一遍完成。

浏览器与驱动版本探测流程

脚本并不硬编码浏览器版本号,而是在运行时从已构建好的镜像里"探针式"读取。chrome分支(tag_and_push_browser_images.sh)依次执行两条命令:

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

即从selenium/node-chrome:4.33.0-20250606镜像内部调用google-chrome --version与chromedriver --version,再用awk截取版本号字段,得到119.0.6045.199与119.0.6045.105。这与 NodeChrome/Dockerfile 构建阶段写入浏览器版本信息的做法保持一致(构建时同样通过google-chrome --version | awk '{print $3}'生成/opt/selenium/browsers/chrome/version)。

拿到长版本号后,short_version()函数(脚本第 53-57 行)按.切分并拼接前两段,得到短版本119.0:

function short_version() { local __version_split=(${__long_version//./ }) echo "${__version_split[0]}.${__version_split[1]}" }

长短双版本并存的设计是标签体系的核心:长版本用于精确定位某个具体浏览器构建,短版本用于提供"该主版本最新可用镜像"的滚动入口。

标签命名规范:六种排列组合

以本次发布为例,脚本构造的CHROME_TAGS数组(脚本第 75-87 行)包含 6 个标签,分别面向 node 与 standalone 两种镜像形态,共 12 条记录:

完整版本(含 Grid 版本 + 构建日期):

标签后缀信息维度
119.0.6045.199-chromedriver-119.0.6045.105-grid-4.33.0-20250606浏览器、驱动、Grid、日期四元组全量
119.0.6045.199-chromedriver-119.0.6045.105-20250606浏览器 + 驱动 + 日期
119.0.6045.199-20250606浏览器 + 日期

短版本(同样三种组合):

标签后缀信息维度
119.0-chromedriver-119.0-grid-4.33.0-20250606短版本四元组全量
119.0-chromedriver-119.0-20250606短版本浏览器 + 驱动 + 日期
119.0-20250606短版本浏览器 + 日期

对每个标签,脚本循环调用retag node-chrome "<tag>"与retag standalone-chrome "<tag>"(脚本第 101-104 行),因此最终得到selenium/node-chrome:119.0-20250606与selenium/standalone-chrome:119.0-20250606等成对标签。这一命名结构与 docs/docker-hub/node-chrome.md 和 docs/docker-hub/standalone-chrome.md 中"如何选择正确标签"一节描述的通式完全对应:

selenium/node-chrome-<Major>.<Minor>.<Patch>-<YYYYMMDD> selenium/node-chrome-<browserVersion>-<browserDriver>-<browserDriverVersion>-<Major>.<Minor>.<Patch>-<YYYYMMDD>

RELEASE_OLD_VERSION:为何只打带日期的标签

本次命令的第 6 个参数为true,对应脚本第 88-99 行的分支逻辑:当RELEASE_OLD_VERSION=true时,CHROME_TAGS数组不再追加以下 4 个"无日期、无 Grid 版本"的浮动标签:

119.0.6045.199-chromedriver-119.0.6045.105 119.0.6045.199 119.0-chromedriver-119.0 119.0

这正是本次发布记录只出现 6 组标签、而非 10 组的原因。从仓库维护模式可以推断:chrome_119.md出现在多个 Grid 版本的 changelog 目录中(例如 CHANGELOG/4.48.0/chrome_119.md 存在完全相同的 Chrome/ChromeDriver 版本组合),说明 Chrome 119 属于"旧版本浏览器随新 Grid 版本补发"的场景;此时若再打119.0这类无日期标签,会覆盖此前其他构建产出的同名浮动标签,破坏"119.0始终指向最新构建"的语义。因此旧版本补发一律使用带YYYYMMDD的确定性标签,避免歧义。

当RELEASE_OLD_VERSION=false(即发布当前主推浏览器版本)时,脚本会追加这 4 个浮动标签,让用户可以用selenium/node-chrome:119.0这种简洁形式拉取镜像。

从发布记录到实际使用

理解标签体系后,即可将本次发布记录直接转化为可运行的命令。例如在 Hub/Node 架构中启动一个 Chrome 119 节点(详见 docs/docker-hub/node-chrome.md):

docker 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_HOST=selenium-hub \ --shm-size="2g" \ selenium/node-chrome:119.0-20250606

若希望并发会话更稳定,推荐使用含驱动版本的全量标签,将浏览器与驱动同时钉死:

docker run -d --net grid -e SE_EVENT_BUS_HOST=selenium-hub \ --shm-size="2g" \ selenium/node-chrome:119.0.6045.199-chromedriver-119.0.6045.105-grid-4.33.0-20250606

单机场景可直接使用 Standalone 形态(详见 docs/docker-hub/standalone-chrome.md):

docker run -d -p 4444:4444 -p 7900:7900 --shm-size="2g" \ selenium/standalone-chrome:119.0-20250606

两点实操提醒:

  • 运行含浏览器的镜像务必加--shm-size="2g",否则容器内/dev/shm空间不足会导致浏览器崩溃;
  • 测试脚本统一指向http://localhost:4444;如需观察容器内浏览器运行画面,可访问 VNC 入口http://localhost:7900/?autoconnect=1&resize=scale&password=secret(仅 standalone 场景已映射端口时可用)。

与发布矩阵的关系及维护注意

这份发布记录并非孤立文件,而是 CHANGELOG/README.md 中"Grid 版本 × 浏览器版本"矩阵的叶子节点——矩阵中4.33.0一行 Chrome 119 列的[✓](https://link.gitcode.com/i/83c51fa85e8bbce90487b15617ffbdb9)链接即指向本文解读的文档。矩阵的用途是帮助用户在"最新 Grid 核心能力"与"钉死浏览器版本"之间做权衡:既要新功能,又怕浏览器版本迁移风险时,可以查矩阵找到对应组合的 changelog,再按其中记录的具体标签拉取镜像。

从源码结构看,该标签生成流程由 Makefile 统一编排:tag_and_push_browser_images目标聚合了tag_and_push_chrome_images等子目标,后者以$(VERSION) $(BUILD_DATE) $(NAMESPACE) $(PUSH_IMAGE) chrome $(RELEASE_OLD_VERSION)的参数顺序调用脚本——与发布记录中命令行的参数位完全一致,保证文档、脚本与构建流水线三者自洽。

最后需要说明矩阵官方提示的适用范围(CHANGELOG/README.md):项目并未对"每种 Grid 版本 × 浏览器版本组合"做全量回归测试,具体某个组合是否能完全按预期工作,需要使用者根据自己的测试场景自行评估。这也正是"以完整标签钉死版本、按需验证"这一用法的价值所在。

延伸阅读

  • 脚本实现:tag_and_push_browser_images.sh
  • 构建编排:Makefile
  • 镜像使用文档:docs/docker-hub/node-chrome.md、docs/docker-hub/standalone-chrome.md
  • 版本矩阵:CHANGELOG/README.md
  • 同版本浏览器在当前发行版的记录:CHANGELOG/4.48.0/chrome_119.md
  • 测试
  • 后端
  • 云原生
  • 容器编排
  • 可观测性

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

相关推荐

上一篇:Palworld存档转换工具终极指南:3步轻松备份与修复游戏进度
下一篇:5分钟为OBS直播添加免费实时字幕:新手终极指南

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

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

5G OTA测试全解析:从空口测量原理到暗室搭建与波束验证

/* 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 5:08:28

自托管AI助手实战:Docker+NAS部署多Agent协作与定时任务

1. 从标题拆解这个自托管AI助手的真实价值1.1 这个项目到底解决了什么问题第一次看到这个标题的时候&#xff0c;我脑子里冒出来的第一个念头是&#xff1a;又一个套壳聊天界面&#xff1f;但仔细拆开看&#xff0c;它其实踩中了三个很实际的需求点。第一是自托管&#xff0c;数…

作者头像 李华
网站建设 2026/10/9 5:08:21

Modbus数据模拟:工业现场必用的协议验证工程实践

/* 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 5:06:51

数据库选型不是选优而是匹配:从CAP、读写比到一致性需求的决策树

1. 这不是“选哪个更好”的选择题&#xff0c;而是“在什么场景下必须用哪个”的生存题你打开招聘网站搜“后端开发”&#xff0c;90%的JD里都写着“熟悉MySQL/PostgreSQL&#xff0c;了解Redis/MongoDB”&#xff1b;你翻开源项目文档&#xff0c;几乎每份架构图里都同时出现一…

作者头像 李华
网站建设 2026/10/9 5:06:37

极性排序(Polarity Sorting)题解:2-SAT+拓扑排序综合建模

AtCoder Beginner Contest 442 的 E 题是 Polarity Sorting&#xff0c;中文社区直接翻译成"极性排序"。我看到题名的第一反应是&#xff1a;又要维护一个正负号再排序的模拟题吗&#xff1f;实际把题面读完之后发现完全不是那么回事&#xff0c;它比表面看起来要深一…

作者头像 李华
网站建设 2026/10/9 5:06:24

晶圆盒ID识别不再难:国产一体式设备AH-WIR-S128深度解析

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

作者头像 李华