- 测试
- 后端
- 云原生
- 容器编排
- 可观测性
【免费下载链接】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
本篇技术指南围绕 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 个位置参数:
| 参数位 | 变量名 | 本次取值 | 含义 |
|---|---|---|---|
$1 | VERSION | 4.33.0 | Selenium Grid 主版本号 |
$2 | BUILD_DATE | 20250606 | 构建日期(YYYYMMDD) |
$3 | NAMESPACE | selenium | 镜像仓库命名空间 |
$4 | PUSH_IMAGE | false | 是否执行docker push |
$5 | BROWSER | chrome | 浏览器类型 |
$6 | RELEASE_OLD_VERSION | true | 是否为旧版本浏览器补发标签 |
$7 | PLATFORM | (缺省) | 构建平台,默认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
相关推荐
docker-selenium 镜像标签生成全解:以 Chrome 130 / Selenium Grid 4.33.0 发布记录为例
docker selenium 镜像标签生成全解:以 Chrome 130 / Selenium Grid 4.33.0 发布记录为例 本篇文章以仓库内 CHA
测试后端云原生容器编排可观测性docker-selenium 镜像标签发布实战:以 Selenium Grid 4.33.0 + Chrome 126 为例解读 tag_and_push_browser_images.sh
docker selenium 镜像标签发布实战:以 Selenium Grid 4.33.0 + Chrome 126 为例解读 tag_and_push_b
测试后端云原生容器编排可观测性FastStream 应用与应用访问日志指南:从 Context 日志到 Structlog 结构化日志
FastStream 应用与应用访问日志指南:从 Context 日志到 Structlog 结构化日志 导读 FastStream 作为面向 Kafka、Ra
测试后端云原生容器编排可观测性
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考