news 2026/10/9 5:29:34

docker-selenium Edge 130 镜像发布:tag_and_push_browser_images.sh 打标签流程全解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
docker-selenium Edge 130 镜像发布:tag_and_push_browser_images.sh 打标签流程全解析
  • 测试
  • 后端
  • 云原生
  • 容器编排
  • 可观测性

【免费下载链接】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 项目在 4.34.0 版本发布 Edge 130 系列镜像的真实记录(CHANGELOG/archived/4.34.0/edge_130.md)为主体,结合仓库中的 tag_and_push_browser_images.sh、NodeEdge/Dockerfile 等源码,完整还原 Selenium Grid Edge 镜像的构建、版本探测与多标签发布机制。读完本文,你将掌握 docker-selenium 的镜像标签命名约定、Edge 镜像内部组成,以及如何手动复现一次 Edge 浏览器镜像的发布流程。

发布记录解读:4.34.0 的 Edge 130 镜像

在 4.34.0(构建日期 20250727)这次发布中,Edge 浏览器镜像的版本组合为:

  • Selenium Grid 版本:4.34.0-20250727
  • Edge 浏览器版本:130.0.2849.80(短版本130.0)
  • EdgeDriver 版本:130.0.2849.78(短版本130.0)

发布使用的命令为:

./tag_and_push_browser_images.sh 4.34.0 20250727 selenium false edge true

该脚本共为selenium/node-edge与selenium/standalone-edge两个镜像各打上了 13 个标签(如 CHANGELOG/archived/4.34.0/edge_130.md 所示),完整清单如下:

selenium/node-edge:130.0.2849.80-edgedriver-130.0.2849.78-grid-4.34.0-20250727 selenium/standalone-edge:130.0.2849.80-edgedriver-130.0.2849.78-grid-4.34.0-20250727 selenium/node-edge:130.0.2849.80-edgedriver-130.0.2849.78-20250727 selenium/standalone-edge:130.0.2849.80-edgedriver-130.0.2849.78-20250727 selenium/node-edge:130.0.2849.80-20250727 selenium/standalone-edge:130.0.2849.80-20250727 selenium/node-edge:130.0-edgedriver-130.0-grid-4.34.0-20250727 selenium/standalone-edge:130.0-edgedriver-130.0-grid-4.34.0-20250727 selenium/node-edge:130.0-edgedriver-130.0-20250727 selenium/standalone-edge:130.0-edgedriver-130.0-20250727 selenium/node-edge:130.0-20250727 selenium/standalone-edge:130.0-20250727

注意:这次发布中没有生成不带构建日期的“流动标签”(如130.0、130.0-edgedriver-130.0等),原因是命令的第 6 个参数RELEASE_OLD_VERSION=true。该参数为true时,脚本会跳过那些会被后续版本覆盖的短标签(详见下文源码分析)。

标签生成脚本的完整机制

发布日志中的每一行标签都来自仓库根目录下的 tag_and_push_browser_images.sh,该脚本支持chrome、chromium、edge、firefox、chrome-for-testing五种浏览器,通过 case 分支分发。Edge 分支的完整流程如下。

命令行参数约定

./tag_and_push_browser_images.sh <VERSION> <BUILD_DATE> <NAMESPACE> <PUSH_IMAGE> <BROWSER> [RELEASE_OLD_VERSION] [PLATFORM]
参数默认值说明
VERSION无Selenium Grid 版本号,如4.34.0
BUILD_DATE无构建日期,如20250727,与 VERSION 拼成TAG_VERSION=4.34.0-20250727
NAMESPACE取自NAME环境变量镜像命名空间,Docker Hub 上为selenium
PUSH_IMAGEfalse是否在打标签后执行docker push
BROWSER无浏览器类型,edge走对应分支
RELEASE_OLD_VERSIONfalse为true时跳过不含日期的短标签(如130.0),避免覆盖旧版本标签
PLATFORMlinux/amd64探测版本时运行容器所用的平台

此外脚本还支持两个环境变量:PROMOTE_TAGS(为true时用docker buildx imagetools create在镜像仓库之间直接复制索引标签,而不是本地docker tag,用于发布阶段复用已测试镜像)和PROMOTE_GHCR_NAMESPACE(同一调用中同步镜像到 GHCR 命名空间)。

Edge 版本探测(源码级)

脚本的 edge 分支(tag_and_push_browser_images.sh)通过临时运行已构建好的node-edge镜像来探测真实版本号,而非硬编码:

EDGE_VERSION=$(docker run --rm ${NAMESPACE}/node-edge:${TAG_VERSION} microsoft-edge --version | awk '{print $3}') EDGE_SHORT_VERSION="$(short_version ${EDGE_VERSION})" EDGEDRIVER_VERSION=$(docker run --rm ${NAMESPACE}/node-edge:${TAG_VERSION} msedgedriver --version | awk '{print $4}') EDGEDRIVER_SHORT_VERSION="$(short_version ${EDGEDRIVER_VERSION})"

short_version()函数将130.0.2849.80这类四位版本号截断为前两段130.0:

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

标签集合的构造规则

Edge 分支构造标签数组(tag_and_push_browser_images.sh),核心模式分为三类:

  1. 完整精度标签(浏览器完整版本 + 驱动完整版本 + Grid 版本/日期):
    • ${EDGE_VERSION}-edgedriver-${EDGEDRIVER_VERSION}-grid-${TAG_VERSION}
    • ${EDGE_VERSION}-edgedriver-${EDGEDRIVER_VERSION}-${BUILD_DATE}
    • ${EDGE_VERSION}-${BUILD_DATE}
  2. 短版本标签(130.0级别):
    • ${EDGE_SHORT_VERSION}-edgedriver-${EDGEDRIVER_SHORT_VERSION}-grid-${TAG_VERSION}
    • ${EDGE_SHORT_VERSION}-edgedriver-${EDGEDRIVER_SHORT_VERSION}-${BUILD_DATE}
    • ${EDGE_SHORT_VERSION}-${BUILD_DATE}
  3. 无日期的流动标签(仅当RELEASE_OLD_VERSION=false时追加):
    • ${EDGE_VERSION}-edgedriver-${EDGEDRIVER_VERSION}
    • ${EDGE_VERSION}
    • ${EDGE_SHORT_VERSION}-edgedriver-${EDGEDRIVER_SHORT_VERSION}
    • ${EDGE_SHORT_VERSION}

最后通过循环对node-edge与standalone-edge两个镜像逐一调用retag(tag_and_push_browser_images.sh)。retag()函数在普通模式下执行docker tag并在PUSH_IMAGE=true时docker push;在PROMOTE_TAGS=true时改用docker buildx imagetools create直接以镜像索引(index)为源创建多架构标签,避免本地拉取造成标签退化为单架构(见 tag_and_push_browser_images.sh 的注释说明)。

与 Makefile 的联动

该脚本由 Makefile 中的tag_and_push_edge_images目标调用(Makefile),并被聚合到tag_and_push_browser_images与tag_and_push_browser_images_ghcr等发布目标中;发布流程还会通过docker history校验镜像层数、用docker run ... microsoft-edge --version与msedgedriver --version做冒烟验证(Makefile),确保打标签前镜像本身是可用的。

标签命名约定与选用建议

结合发布日志与 docs/docker-hub/node-edge.md、docs/docker-hub/standalone-edge.md 中的说明,docker-selenium 的 Edge 镜像标签遵循如下约定:

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

一个典型完整标签的语义从左到右依次为:浏览器完整版本(如130.0.2849.80)、驱动名称与完整版本(edgedriver-130.0.2849.78)、Grid 版本(grid-4.34.0-20250727)。docs 中还给出了简化标签的选型表:可以用130.0、130.0-20250727、130.0-edgedriver-130.0-grid-4.34.0-20250727等任意一级组合,取"最近的简化标签"即可获得对应发布。

选用建议:官方文档明确推荐在docker run时使用完整标签锁定具体的浏览器与 Grid 版本,而不是latest,以保证测试环境的可复现性;同时运行包含浏览器的容器务必加--shm-size=2g以使用宿主机共享内存。

镜像内部:Edge 130 在 node-edge 中如何组成

标签背后,selenium/node-edge:130.0.2849.80-...镜像的内容由 NodeEdge/Dockerfile 定义,其构建基座是selenium/node-base(可通过BASE构建参数替换)。关键构建环节如下:

Edge 浏览器安装与版本固定

Dockerfile 支持通过EDGE_VERSION构建参数指定版本(NodeEdge/Dockerfile):

  • 默认microsoft-edge-stable,直接从微软 apt 源安装最新稳定版;
  • 若传入microsoft-edge-stable=130.0.2849.80-1形式的固定版本,则从EDGE_ARCHIVE_SITE(默认https://github.com/NDViet/microsoft-edge-stable/releases/download,即 per-version 归档)下载对应的.deb离线安装,以规避微软官方源对旧版本的清理(--allow-downgrades允许降级安装)。

EdgeDriver 的自动解析

EDGE_DRIVER_VERSION构建参数为空时,构建期会先取 Edge 主版本号,向https://msedgedriver.microsoft.com/LATEST_RELEASE_${MAJOR}_LINUX请求最新驱动版本;若该指针已被微软清理,则回退到与浏览器完全一致的版本,并从归档站点下载对应edgedriver_linux64.zip或edgedriver_linux-aarch64.zip(NodeEdge/Dockerfile)。最终驱动以msedgedriver-<版本>命名并软链到/usr/bin/msedgedriver。

浏览器启动包装器

NodeEdge/wrap_edge_binary 将/usr/bin/microsoft-edge替换为一个包装脚本,实现了三个关键行为:默认追加--no-sandbox(容器内运行必需);通过SE_BROWSER_ARGS_*环境变量批量注入浏览器启动参数;将--lang=xx参数转换为LANGUAGE环境变量(Debian/Ubuntu 上 Edge 不认--lang参数)。同时该包装脚本还会在/opt/selenium/browsers/edge/下写出name、version与binary_location信息文件,供 Selenium Grid 的generate_config生成节点配置时使用(NodeEdge/Dockerfile)。

残留进程与临时文件清理

SE_ENABLE_BROWSER_LEFTOVERS_CLEANUP=true时,supervisor 会启动edge-cleanup.sh守护循环(NodeEdge/edge-cleanup.conf、NodeEdge/edge-cleanup.sh):按SE_BROWSER_LEFTOVERS_PROCESSES_SECS(默认 7200 秒)强杀超龄 msedge 进程,按SE_BROWSER_LEFTOVERS_TEMPFILES_DAYS(默认 1 天)清理/tmp下的.com.microsoft.Edge.*临时目录,清理周期由SE_BROWSER_LEFTOVERS_INTERVAL_SECS(默认 3600 秒)控制,相关默认值见 ENV_VARIABLES.md。

默认环境变量

镜像默认设置SE_OTEL_SERVICE_NAME="selenium-node-edge"以及SE_NODE_ENABLE_MANAGED_DOWNLOADS="true"(后者让节点为会话自动管理下载文件,对应 WebDriver 的--enable-managed-downloads能力,见 ENV_VARIABLES.md)。

手动复现:从构建到发布 Edge 镜像

如果你有自己的构建环境,可以按以下链路手动复现一次 Edge 镜像的发布:

1. 构建镜像(对应 Makefile 的 build 目标):

make build # 或仅构建 node-edge: docker buildx build --platform linux/amd64 \ --build-arg EDGE_VERSION=microsoft-edge-stable=130.0.2849.80-1 \ -t selenium/node-edge:4.34.0-20250727 ./NodeEdge

2. 打标签并推送(即发布日志中的原命令):

./tag_and_push_browser_images.sh 4.34.0 20250727 selenium true edge false

将第 6 个参数改为false,脚本会额外生成130.0、130.0-edgedriver-130.0等无日期流动标签;保持true则与归档的 4.34.0 发布记录完全一致。

3. 冒烟验证(复用 Makefile 的校验思路):

docker run --rm selenium/node-edge:4.34.0-20250727 microsoft-edge --version docker run --rm selenium/node-edge:4.34.0-20250727 msedgedriver --version

4. 运行 Grid:将node-edge接入 Hub 时,按 docs/docker-hub/node-edge.md 的步骤创建网络并指定事件总线主机:

docker network create grid docker run -d -p 4442-4444:4442-4444 --net grid --name selenium-hub selenium/hub:4.34.0-20250727 docker run -d --net grid -e SE_EVENT_BUS_HOST=selenium-hub --shm-size="2g" \ selenium/node-edge:130.0.2849.80-edgedriver-130.0.2849.78-grid-4.34.0-20250727

之后将 WebDriver 测试指向http://localhost:4444即可;如需单机模式,可直接运行selenium/standalone-edge镜像(见 docs/docker-hub/standalone-edge.md)。

小结

一条看似简单的镜像标签发布日志,背后串联了版本探测、多级标签构造、镜像仓库操作(docker tag/docker push/buildx imagetools)以及 Dockerfile 中的浏览器版本固定、驱动自动解析、启动包装与残留清理等多层机制。理解 tag_and_push_browser_images.sh 的标签规则,你就能在拉取selenium/node-edge或selenium/standalone-edge镜像时,依据 docs/docker-hub/node-edge.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
点击查看免费下载

相关推荐

上一篇:如何给foobar2000写插件?以foo_openlyrics为例的foobar SDK + Columns UI开发完整指南
下一篇:ServerPackCreator 核心架构深度剖析:API、App 与 Web 模块协作原理

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

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

CVXPY 优化生态全景:建模框架与求解器生态指南

科学计算 【免费下载链接】cvxpy A Python-embedded modeling language for convex optimization problems. 项目地址&#xff1a; https://gitcode.com/gh_mirrors/cv/cvxpy 点击查看 免费下载 CVXPY 并不是孤立存在的——它处于一个庞大的凸优化软件生态的中心位置。本文基于…

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

python中常用语句

python中常用的语句 &#xff08;1&#xff09;if语句 1、if语句的单分支 格式&#xff1a; if 判断条件:执行语句1 else:执行语句2案例&#xff1a; a10 if a>9:print("ok") else:print("no")2、if语句的多分支 格式&#xff1a;if 条件1:执行语句1…

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

零代码AI图像分割:人像抠图、老照片修复与动漫增强实战指南

1. 这不是“一键美颜”&#xff0c;而是图像语义理解的落地切口你有没有试过把一张泛黄卷边的老照片扫描进电脑&#xff0c;想发到朋友圈却卡在第一步——人像边缘毛糙、背景杂乱、发丝和衣领糊成一片&#xff1f;或者手头有一张动漫线稿&#xff0c;想快速上色但反复用魔棒选区…

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

01-Java 集合框架全景:从 Collection 到 Map 一张关系网理清

两大根接口一张关系网&#xff0c;复杂度速查表存好很多人学集合框架&#xff0c;是从 List、Map、Set 三个单词开始背的&#xff0c;背完还是串不起来&#xff1a;它们之间到底什么关系&#xff1f;为什么 HashMap 既有"哈希"又有"映射"&#xff1f;Colle…

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

Spring Boot商场多功能折扣系统:从业务到答辩的毕设全攻略

知道吗&#xff0c;很多人第一眼看到“基于Spring Boot的商场多功能折扣系统”这个毕设题目时&#xff0c;心里想的是&#xff1a;这不就一个打折功能嘛&#xff0c;商品表、订单表建一建&#xff0c;结算的时候打个折&#xff0c;完事了。但真动手之后&#xff0c;库存、订单状…

作者头像 李华