- 测试
- 后端
- 云原生
- 容器编排
- 可观测性
【免费下载链接】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
本文基于仓库归档的发布记录 CHANGELOG/archived/4.32.0/edge_128.md,还原 Selenium Grid 4.32.0(构建日期 20250515)发布时,为 Edge 128 浏览器镜像生成的全部 Docker 标签,并结合 tag_and_push_browser_images.sh、NodeEdge/Dockerfile 与 docs/docker-hub/node-edge.md 等仓库源码,深入讲解标签的每一位含义、脚本生成原理以及如何在实际 Grid 部署中正确固定镜像版本。读完本文,你将能:看懂
selenium/node-edge与selenium/standalone-edge全量标签族;掌握浏览器版本、驱动版本、Grid 版本三者之间的对应关系;并能够根据镜像标签反推出容器内 Edge 与 msedgedriver 的具体版本。
本次发布的核心版本矩阵
归档记录edge_128.md对应的是一次针对 Edge 128 的浏览器镜像打标签操作。该记录对应的命令为:
./tag_and_push_browser_images.sh 4.32.0 20250515 selenium false edge true参数依次表示:Selenium Grid 版本4.32.0、构建日期20250515、命名空间selenium、PUSH_IMAGE=false(只打标签不推送)、浏览器edge、第六个参数RELEASE_OLD_VERSION=true(不追加无日期的浮动标签)。由此确定的版本三元组为:
| 组件 | 版本号 | 短版本 |
|---|---|---|
| Selenium Grid | 4.32.0-20250515 | — |
| Microsoft Edge | 128.0.2739.79 | 128.0 |
| EdgeDriver (msedgedriver) | 128.0.2739.81 | 128.0 |
其中"短版本"由脚本的short_version()函数截取主版本号的前两段(128.0)生成,用于提供更短、更易记忆的标签别名。值得注意的是,同一个 Edge 128 浏览器镜像在后续版本中也会被复用打标——例如仓库中 CHANGELOG/4.48.0/edge_128.md 记录了同样的128.0.2739.79 / 128.0.2739.81被再次标记到grid-4.48.0-20260909,可见归档目录保存的正是 4.32.0 这一时间点上该浏览器镜像的标签快照。
完整的标签生成输出
以下为该次发布记录中逐条回显的全部标签输出(每条标签同时应用于node-edge与standalone-edge两种镜像):
Tagged selenium/node-edge:128.0.2739.79-edgedriver-128.0.2739.81-grid-4.32.0-20250515 Tagged selenium/standalone-edge:128.0.2739.79-edgedriver-128.0.2739.81-grid-4.32.0-20250515 Tagged selenium/node-edge:128.0.2739.79-edgedriver-128.0.2739.81-20250515 Tagged selenium/standalone-edge:128.0.2739.79-edgedriver-128.0.2739.81-20250515 Tagged selenium/node-edge:128.0.2739.79-20250515 Tagged selenium/standalone-edge:128.0.2739.79-20250515 Tagged selenium/node-edge:128.0-edgedriver-128.0-grid-4.32.0-20250515 Tagged selenium/standalone-edge:128.0-edgedriver-128.0-grid-4.32.0-20250515 Tagged selenium/node-edge:128.0-edgedriver-128.0-20250515 Tagged selenium/standalone-edge:128.0-edgedriver-128.0-20250515 Tagged selenium/node-edge:128.0-20250515 Tagged selenium/standalone-edge:128.0-20250515即每个镜像 6 个标签、共 12 条回显。因为本次调用将RELEASE_OLD_VERSION设为true,脚本跳过了末尾追加的 4 个"无日期浮动标签",否则每个镜像还会额外生成128.0.2739.79-edgedriver-128.0.2739.81、128.0.2739.79、128.0-edgedriver-128.0、128.0这 4 个不带日期的标签。
解码标签命名体系
将上述 12 条标签去重归纳,selenium/node-edge与selenium/standalone-edge的标签均由两类"粒度"组成:
完整版本粒度(长标签)
| 标签 | 含义 |
|---|---|
128.0.2739.79-edgedriver-128.0.2739.81-grid-4.32.0-20250515 | 完整浏览器版本 + 完整驱动版本 + 完整 Grid 版本 + 构建日期,信息最全 |
128.0.2739.79-edgedriver-128.0.2739.81-20250515 | 完整浏览器/驱动版本 + 构建日期 |
128.0.2739.79-20250515 | 完整浏览器版本 + 构建日期 |
短版本粒度(别名标签)
| 标签 | 含义 |
|---|---|
128.0-edgedriver-128.0-grid-4.32.0-20250515 | 短浏览器版本 + 短驱动版本 + 完整 Grid 版本 + 构建日期 |
128.0-edgedriver-128.0-20250515 | 短浏览器/驱动版本 + 构建日期 |
128.0-20250515 | 短浏览器版本 + 构建日期 |
这与 docs/docker-hub/node-edge.md 中描述的通用标签结构一致:selenium/node-edge-<browserVersion>-<browserDriver>-<browserDriverVersion>-<Major>.<Minor>.<Patch>-<YYYYMMDD>及其排列组合。短版本标签的价值在于:浏览器与驱动的短版本(128.0)在同一个主版本号生命周期内保持稳定,用户可以只关心主版本而不必追踪每次补丁更新。
发布脚本的底层实现
生成上述标签的核心逻辑位于 tag_and_push_browser_images.sh 的edge)分支(第 151-192 行)。整个流程分三步:
第一步:从镜像内探测真实版本号
脚本不依赖外部 API,而是直接运行已经构建好的镜像来探测版本:
EDGE_VERSION=$(docker run --rm ${NAMESPACE}/node-edge:${TAG_VERSION} microsoft-edge --version | awk '{print $3}') EDGEDRIVER_VERSION=$(docker run --rm ${NAMESPACE}/node-edge:${TAG_VERSION} msedgedriver --version | awk '{print $4}')即分别执行microsoft-edge --version与msedgedriver --version,再用awk取出第三个/第四个字段。其中${TAG_VERSION}由VERSION-BUILD_DATE(4.32.0-20250515)拼接而成。随后用short_version()函数(第 53-57 行,按.切分取前两段)生成短版本。
第二步:组装标签数组
EDGE_TAGS数组按"先完整版本、后短版本、再按是否含驱动和 Grid 版本"的顺序排列,与归档记录的回显顺序一一对应。
第三步:统一打标与(可选)推送
for edge_tag in "${EDGE_TAGS[@]}"; do retag node-edge "${edge_tag}" retag standalone-edge "${edge_tag}" doneretag()函数(第 31-51 行)对每个标签执行docker tag,并在PUSH_IMAGE=true时追加docker push。此外它还支持发布流水线中的PROMOTE_TAGS=true模式:当本次发布直接复用 CI 已测试的镜像清单而非重新构建时,会改用docker buildx imagetools create在 registry 之间复制多架构清单,避免docker tag只能引用本地镜像导致标签退化为单架构。
Makefile 中的触发入口
该脚本由 Makefile 统一调度。仓库根目录 Makefile 中:
- 第 781 行 的
tag_and_push_browser_images聚合目标会依次调用五种浏览器的打标子目标; - 第 792-793 行 的
tag_and_push_edge_images即为 Edge 镜像的入口,执行:
tag_and_push_edge_images: ./tag_and_push_browser_images.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) $(PUSH_IMAGE) edge $(RELEASE_OLD_VERSION)- 第 772-777 行 的
edge_upgrade_version展示了 Edge 镜像的构建与校验流程:先构建node-edge:${TAG_VERSION},再以--build-arg BASE=node-edge构建standalone-edge,随后依次运行selenium-server.jar info --version、microsoft-edge --version、msedgedriver --version做三重校验——这正是打标脚本能从镜像中可靠探测版本的前提。
NodeEdge 镜像内部:Edge 与 msedgedriver 从哪来
标签背后对应的是 NodeEdge/Dockerfile 构建的镜像内容:
Edge 浏览器安装(第 16-34 行):默认安装microsoft-edge-stable,通过 Microsoft 官方 apt 仓库安装;若通过EDGE_VERSION指定了具体版本(如microsoft-edge-stable=128.0.2739.79-1),则从EDGE_ARCHIVE_SITE指向的按版本归档站点拉取对应的.deb包安装,并允许--allow-downgrades。
msedgedriver 安装(第 51-68 行):默认先根据已装 Edge 的主版本号请求https://msedgedriver.microsoft.com/LATEST_RELEASE_<major>_LINUX获取匹配的驱动版本;若该指针已被 Microsoft 清理,则回退为直接使用浏览器自身的完整版本号,再从官方或归档站点下载edgedriver_linux64.zip(或 aarch64 对应包),解压到/opt/selenium/并软链至/usr/bin/msedgedriver。
浏览器信息导出(第 82-85 行):构建时把 Edge 版本写入/opt/selenium/browsers/edge/version,并生成binary_locationJSON,供 Selenium 配置生成器在 Node 注册时声明浏览器二进制位置(支持通过SE_BROWSER_BINARY_LOCATION覆盖)。镜像同时预设SE_OTEL_SERVICE_NAME="selenium-node-edge"与SE_NODE_ENABLE_MANAGED_DOWNLOADS="true"(由 Node 自动管理会话期间下载的文件)。
启动包装器(NodeEdge/wrap_edge_binary):构建期将/usr/bin/microsoft-edge替换为包装脚本,统一注入--no-sandbox、将SE_BROWSER_ARGS_*系列环境变量收集拼接为额外启动参数、并把--lang=xx转换为LANGUAGE环境变量,保证容器内 Edge 的语言与参数行为一致。
残留进程清理(NodeEdge/edge-cleanup.sh 与 NodeEdge/edge-cleanup.conf):由 supervisord 以priority=20托管的可选守护进程,按SE_ENABLE_BROWSER_LEFTOVERS_CLEANUP开关启用,周期性地kill -9超过SE_BROWSER_LEFTOVERS_PROCESSES_SECS的 msedge 进程并清理/tmp下超过SE_BROWSER_LEFTOVERS_TEMPFILES_DAYS的临时文件。
在实际 Grid 中运行并固定 Edge 版本
NodeEdge/Dockerfile 构建出的node-edge是 Grid 的浏览器节点,需配合 Hub/EventBus 使用。docs/docker-hub/node-edge.md 给出的标准流程如下:
# 1. 创建共享网络 docker network create grid # 2. 启动 Hub docker run -d -p 4442-4444:4442-4444 --net grid --name selenium-hub selenium/hub:latest # 3. 启动 Edge 节点(固定到本文讨论的 Edge 128 标签) docker run -d --net grid -e SE_EVENT_BUS_HOST=selenium-hub \ --shm-size="2g" \ selenium/node-edge:128.0-20250515 # 4. 将 WebDriver 测试指向 http://localhost:4444 # 5. 结束后清理网络 docker network rm grid几点实战建议:
- 务必使用
--shm-size=2g:浏览器镜像依赖宿主共享内存,默认 64MB 的/dev/shm极易触发崩溃;NodeBase/Dockerfile中也会为容器内/dev/shm设置可执行权限以兼容 Docker Desktop/WSL2 环境。 - 固定完整标签而非
latest:文档明确建议用完整标签固定浏览器与 Grid 版本。若希望跨补丁版本保持稳定,可选128.0-20250515这类短版本 + 日期的标签;若需要完全可复现,则应选用128.0.2739.79-edgedriver-128.0.2739.81-grid-4.32.0-20250515这种全量标签。 - 可视化观察:如需查看容器内浏览器界面,可访问
http://localhost:7900/?autoconnect=1&resize=scale&password=secret(noVNC 默认端口与密码,相关服务由 NodeBase 中的 start-novnc.sh 提供)。
与标签配套的关键环境变量
从 ENV_VARIABLES.md 与 NodeBase/Dockerfile 中可以看到,与 Edge 节点运行密切相关的默认配置包括:
| 环境变量 | 默认值 | 作用 |
|---|---|---|
SE_NODE_ENABLE_MANAGED_DOWNLOADS | true | Node 自动管理会话下载文件(对应 Grid--enable-managed-downloads) |
SE_OFFLINE | true | Selenium Manager 离线模式,使用镜像内预装的浏览器与驱动 |
SE_NODE_BROWSER_VERSION | stable | 覆盖 Node stereotype 中的 browserVersion,默认取镜像内浏览器短版本(如128.0) |
SE_NODE_PLATFORM_NAME | Linux | 覆盖 stereotype 中的 platformName |
SE_NODE_MAX_SESSIONS | 1 | 单节点最大并发会话数 |
SE_ENABLE_BROWSER_LEFTOVERS_CLEANUP | false | 是否启用残留 msedge 进程/临时文件清理守护 |
SE_BROWSER_LEFTOVERS_PROCESSES_SECS | 7200 | 进程存活超过该秒数即被清理 |
SE_BROWSER_LEFTOVERS_TEMPFILES_DAYS | 1 | /tmp下.com.microsoft.Edge.*目录保留天数 |
SE_BROWSER_LEFTOVERS_INTERVAL_SECS | 3600 | 清理守护循环间隔 |
如何验证镜像内的实际版本
发布脚本探测版本的方式本身即可作为日常校验手段。拉取任意 Edge 标签的镜像后,直接复用脚本中的命令即可确认版本一致性:
docker run --rm selenium/node-edge:128.0-20250515 microsoft-edge --version # 期望输出 128.0.2739.79 docker run --rm selenium/node-edge:128.0-20250515 msedgedriver --version # 期望输出 128.0.2739.81 docker run --rm selenium/standalone-edge:128.0-20250515 /opt/selenium/selenium-server.jar info --version这三条命令与 Makefile 中edge_upgrade_version目标内置的校验逻辑完全一致,可用于确认所拉取的标签确实对应 Edge 128.0.2739.79 / EdgeDriver 128.0.2739.81,从而保障测试环境的浏览器行为可预期。
- 测试
- 后端
- 云原生
- 容器编排
- 可观测性
【免费下载链接】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 4.30.0 Edge 129 镜像标签体系详解:从 tag_and_push_browser_images.sh 看浏览器镜像发布全流程
docker selenium 4.30.0 Edge 129 镜像标签体系详解:从 tag_and_push_browser_images.sh 看浏览器镜像
测试后端云原生容器编排可观测性docker-selenium 中 Edge 浏览器镜像的标签体系与发布流程全解:从 `tag_and_push_browser_images.sh` 到 node-edge 镜像
docker selenium 中 Edge 浏览器镜像的标签体系与发布流程全解:从 tag_and_push_browser_images.sh 到 node
测试后端云原生容器编排可观测性docker-selenium 4.48.0 发布 Firefox 130 镜像:标签命名规则与浏览器镜像发布流程解析
docker selenium 4.48.0 发布 Firefox 130 镜像:标签命名规则与浏览器镜像发布流程解析 本篇技术解读围绕 docker sele
测试后端云原生容器编排可观测性
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考