- 测试
- 后端
- 云原生
- 容器编排
- 可观测性
【免费下载链接】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.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_IMAGE | false | 是否在打标签后执行docker push |
BROWSER | 无 | 浏览器类型,edge走对应分支 |
RELEASE_OLD_VERSION | false | 为true时跳过不含日期的短标签(如130.0),避免覆盖旧版本标签 |
PLATFORM | linux/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),核心模式分为三类:
- 完整精度标签(浏览器完整版本 + 驱动完整版本 + Grid 版本/日期):
${EDGE_VERSION}-edgedriver-${EDGEDRIVER_VERSION}-grid-${TAG_VERSION}${EDGE_VERSION}-edgedriver-${EDGEDRIVER_VERSION}-${BUILD_DATE}${EDGE_VERSION}-${BUILD_DATE}
- 短版本标签(
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}
- 无日期的流动标签(仅当
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 ./NodeEdge2. 打标签并推送(即发布日志中的原命令):
./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 --version4. 运行 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
相关推荐
docker-selenium 4.48.0 发布 Edge 144 镜像:tag_and_push_browser_images.sh 打标签与发布流程解析
docker selenium 4.48.0 发布 Edge 144 镜像:tag_and_push_browser_images.sh 打标签与发布流程解析
测试后端云原生容器编排可观测性docker-selenium Edge 128 镜像发布记录解析:tag_and_push_browser_images.sh 打标流程与镜像标签约定
docker selenium Edge 128 镜像发布记录解析:tag_and_push_browser_images.sh 打标流程与镜像标签约定 本文以
测试后端云原生容器编排可观测性docker-selenium 4.34.0 Edge 镜像发布记录解读:tag_and_push_browser_images.sh 打标签流程与 node-edge 镜像构建解析
docker selenium 4.34.0 Edge 镜像发布记录解读:tag_and_push_browser_images.sh 打标签流程与 node
测试后端云原生容器编排可观测性
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考