docker-selenium 镜像标签生成机制深度解析:以 Selenium Grid 4.28.1 + Firefox 102 发布记录为例

发布时间:2026/10/5 6:49:51
docker-selenium 镜像标签生成机制深度解析:以 Selenium Grid 4.28.1 + Firefox 102 发布记录为例 测试后端云原生容器编排可观测性【免费下载链接】docker-seleniumProvides 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 仓库中 Selenium Grid 4.28.1 版本的 Firefox 102 发布记录CHANGELOG/archived/4.28.1/firefox_102.md完整讲解该项目的浏览器镜像多标签Tagging Convention生成机制一次发布如何同时产出 6 种维度的node-firefox与standalone-firefox镜像标签以及这些标签背后对应的命令参数、版本探测、发布逻辑与使用方式。读完本文你将掌握 docker-selenium 镜像标签的命名语义、tag_and_push_browser_images.sh脚本的完整调用链以及如何按标签精确定位某个 Firefox 版本的 Selenium Grid 镜像用于跨浏览器测试。发布记录解读一条命令产出 12 个镜像标签归档于 CHANGELOG/archived/4.28.1/firefox_102.md 的发布记录展示了整个 Firefox 102 镜像发布过程的原始输出它本质上是一次浏览器镜像多标签发布的可执行记录./tag_and_push_browser_images.sh 4.28.1 20250202 selenium false firefox true一次调用脚本先探测镜像内 Firefox 与 GeckoDriver 的实际版本再据此为selenium/node-firefox和selenium/standalone-firefox两类镜像各生成 6 个标签最终共输出 12 个Tagged结果。记录中的关键版本信息如下维度值Selenium Grid 版本含构建日期4.28.1-20250202Firefox 完整版本102.0.1Firefox 短版本102.0GeckoDriver 完整版本0.35.0GeckoDriver 短版本0.35这段记录所揭示的正是 docker-selenium 的核心发布策略同一套 Selenium Grid 镜像通过多标签让使用者既可以用最新 Grid 能力也可以锁定特定浏览器/驱动版本。正如 CHANGELOG/README.md 所说明的项目动机是提供最新的 Selenium Grid 核心版本与新功能同时允许用户为跨浏览器测试或针对特定浏览器版本的问题固定浏览器版本用户只需在矩阵表中找到对应镜像标签、拉取并开始测试。命令参数语义六个位置参数各代表什么发布记录的第一行命令完整对应 tag_and_push_browser_images.sh 中的参数解析第 1-9 行VERSION$1 # 4.28.1 BUILD_DATE$2 # 20250202 NAMESPACE$3 # selenium PUSH_IMAGE${4:-false} BROWSER$5 # firefox RELEASE_OLD_VERSION${6:-false} PLATFORM${7:-linux/amd64}位置参数本例取值作用1VERSION4.28.1Selenium Grid 版本号与构建日期拼成基础标签4.28.1-202502022BUILD_DATE20250202构建日期YYYYMMDD用于区分同版本多次构建3NAMESPACEselenium镜像命名空间最终拼为selenium/node-firefox等4PUSH_IMAGEfalse是否在打标签后执行docker push默认 false5BROWSERfirefox浏览器类型决定走脚本中哪个 case 分支6RELEASE_OLD_VERSIONtrue是否为历史版本重新补发标签默认 false7PLATFORMlinux/amd64目标平台chrome 分支探测版本时使用注意本记录中PUSH_IMAGEfalse说明这是一条仅打标签不推送的记录归档性质的复录实际发布时由发布流水线以PUSH_IMAGEtrue调用完成镜像推送。而RELEASE_OLD_VERSIONtrue的含义可以从脚本逻辑反推脚本第 88 行与第 219 行都判断if [ ${RELEASE_OLD_VERSION} false ]才追加无构建日期的简化标签也就是说归档旧版本时只重新产出带日期的标签集避免重复添加早已在原始发布时打过的基础版本标签。版本探测标签里的版本号从哪来Firefox 分支脚本第 195-204 行不是从构建参数读版本号而是直接运行已构建镜像中的二进制来探测真实版本FIREFOX_VERSION$(docker run --rm ${NAMESPACE}/node-firefox:${TAG_VERSION} firefox --version | awk {print $3}) GECKODRIVER_VERSION$(docker run --rm ${NAMESPACE}/node-firefox:${TAG_VERSION} geckodriver --version | awk NR1{print $2})对基础镜像selenium/node-firefox:4.28.1-20250202执行firefox --version取第 3 个字段得到102.0.1执行geckodriver --version取首行第 2 个字段得到0.35.0随后通过short_version()函数脚本第 53-57 行把版本按.拆分并取前两段102.0.1 - 102.0、0.35.0 - 0.35。这套探测而非硬编码的设计保证了标签永远反映镜像内的真实浏览器与驱动版本避免参数与镜像内容不一致。从镜像构建侧看版本一致性由 NodeFirefox/Dockerfile 保证镜像构建时通过ARG FIREFOX_VERSION下载指定版本 Firefox支持.deb、.tar.bz2、.tar.xz三种包由 NodeFirefox/install-firefox-package.sh 分别处理并将 GeckoDriver 下载解压到/opt/geckodriver-$GK_VERSION后软链到/usr/bin/geckodriverDockerfile 第 76-86 行启动时 NodeBase/start-selenium-node.sh 通过-Dwebdriver.gecko.driver/usr/bin/geckodriver第 202 行把驱动位置注入 Selenium Server。六种标签模式命名约定的完整拆解发布记录的全部 12 行Tagged输出是理解 docker-selenium 标签约定的最佳范例。以node-firefox为例六种模式如下standalone-firefox完全对应Tagged selenium/node-firefox:102.0.1-geckodriver-0.35.0-grid-4.28.1-20250202 Tagged selenium/node-firefox:102.0.1-geckodriver-0.35.0-20250202 Tagged selenium/node-firefox:102.0.1-20250202 Tagged selenium/node-firefox:102.0-geckodriver-0.35-grid-4.28.1-20250202 Tagged selenium/node-firefox:102.0-geckodriver-0.35-20250202 Tagged selenium/node-firefox:102.0-20250202其命名规则对应脚本第 206-218 行FIREFOX_TAGS数组可归纳为三种组合 × 长/短版本两组组合语义长版本标签短版本标签浏览器版本 驱动版本 Grid 版本 构建日期信息最全102.0.1-geckodriver-0.35.0-grid-4.28.1-20250202102.0-geckodriver-0.35-grid-4.28.1-20250202浏览器版本 驱动版本 构建日期102.0.1-geckodriver-0.35.0-20250202102.0-geckodriver-0.35-20250202浏览器版本 构建日期102.0.1-20250202102.0-20250202同一逻辑在 chrome、chromium、edge、chrome-for-testing 分支中完全复用脚本第 61-284 行区别仅是版本探测命令与驱动命名如 edge 分支探测microsoft-edge --version与msedgedriver --version。短版本标签的存在是为了方便使用者以102.0这种稳定的主版本号引用镜像而不必关心补丁版本。由于本次是RELEASE_OLD_VERSIONtrue输出中没有出现不带构建日期的简化标签如selenium/node-firefox:102.0.1、selenium/node-firefox:102.0-geckodriver-0.35.0等。若以false调用脚本会追加这 4 类标签脚本第 219-230 行分别覆盖浏览器驱动、仅浏览器、短浏览器短驱动、仅短浏览器从而让用户可以用最简标签拉取镜像。发布机制源码解析从打标签到推送每个标签最终由retag()函数脚本第 31-51 行完成。默认路径本地镜像已存在docker tag ${NAMESPACE}/${__image}:${TAG_VERSION} ${NAMESPACE}/${__image}:${__tag} echo Tagged ${NAMESPACE}/${__image}:${__tag} if [ ${PUSH_IMAGE} true ]; then docker push ${NAMESPACE}/${__image}:${__tag} fi即把基础标签selenium/node-firefox:4.28.1-20250202用docker tag复制为各维度别名PUSH_IMAGEtrue时逐一向仓库推送。脚本在 case 分支内对每个标签依次调用retag node-firefox tag与retag standalone-firefox tag如脚本第 232-235 行保证 Node 与 Standalone 两种形态镜像标签完全同步。此外retag()还支持两条更高级的发布路径从脚本注释与第 36-44 行可见PROMOTE_TAGStrue发布流程直接推广测试通过的镜像不做本地重建此时docker tag无法表达跨仓库操作改用docker buildx imagetools create在 registry 间复制 manifest index从而保住多架构标签PROMOTE_GHCR_NAMESPACE配合 GHCR 镜像仓库在同一调用中把标签同时镜像到 GHCR 命名空间。与发布流水线的衔接tag_and_push_browser_images.sh并非孤立脚本它与 Makefile 中的发布目标衔接tag_and_push_browser_images: tag_and_push_chrome_images tag_and_push_chrome-for-testing_images tag_and_push_chromium_images tag_and_push_firefox_images tag_and_push_edge_images ... tag_and_push_firefox_images: ./tag_and_push_browser_images.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) $(PUSH_IMAGE) firefox $(RELEASE_OLD_VERSION)即make tag_and_push_firefox_images会把 Makefile 中定义的VERSION、BUILD_DATE、NAMESPACE、PUSH_IMAGE、RELEASE_OLD_VERSION变量透传给脚本tag_and_push_browser_images.sh。发布记录中selenium false firefox true的false与true正是PUSH_IMAGEfalse、RELEASE_OLD_VERSIONtrue这两个透传值。另外 Makefile 第 798-808 行还提供tag_and_push_browser_images_ghcr用docker buildx imagetools create将本地全部标签镜像到 GHCR。如何使用这些标签运行 Firefox 节点标签的最终价值体现在拉取与运行。以本记录中的标签为例可直接用最精确的标签拉取节点镜像docker run -d --net grid -e SE_EVENT_BUS_HOSTselenium-hub \ --shm-size2g \ selenium/node-firefox:102.0.1-geckodriver-0.35.0-grid-4.28.1-20250202详细运行方式可参考 docs/docker-hub/node-firefox.md先docker network create grid创建网络再启动 Hub映射 4442-4444 端口与 Node通过SE_EVENT_BUS_HOSTselenium-hub让节点按容器名发现事件总线测试指向http://localhost:4444。该文档还明确建议docker run浏览器镜像时务必使用--shm-size2g共享内存参数并建议使用完整标签固定浏览器与 Grid 版本而非latest。用户侧标签选择逻辑与 docs/docker-hub/node-firefox.md 的 Tagging Conventions 说明一致# 锁定 Firefox 102.0 GeckoDriver 0.35 Grid 4.28.1信息最全 selenium/node-firefox:102.0.1-geckodriver-0.35.0-grid-4.28.1-20250202 # 锁定 Firefox 102.0 构建日期简化 selenium/node-firefox:102.0-20250202 # 只想用最新构建latest 系列 selenium/node-firefox:latest标签中的node-与standalone-前缀分别对应两种部署形态Node 需要配合 Hub/Grid 使用由 NodeBase/start-selenium-node.sh 启动依赖SE_EVENT_BUS_HOST等环境变量Standalone 则是浏览器与 Grid 打包的单容器形态。镜像内部NodeFirefox/Dockerfile 会把浏览器名、版本与moz:firefoxOptions.binary二进制位置写入/opt/selenium/browsers/firefox/第 93-96 行供 Selenium Server 生成节点配置同时通过SE_NODE_ENABLE_MANAGED_DOWNLOADStrue开启受管下载并由 NodeFirefox/firefox-cleanup.sh 配合 supervisord 定期清理超时残留的 Firefox 进程默认参数SE_BROWSER_LEFTOVERS_PROCESSES_SECS与SE_BROWSER_LEFTOVERS_INTERVAL_SECS可调。归档记录与版本矩阵的定位本发布记录存放于 CHANGELOG/archived/4.28.1/属于已归档的 Grid 版本。其对应的版本矩阵展示在 CHANGELOG/README.md 中表格以 Grid 版本为行、浏览器版本为列每个 ✓ 链接到该浏览器版本的详细发布记录最新的 4.48.0 记录位于 CHANGELOG/4.48.0/firefox_102.md其命令参数与本记录完全一致仅 Grid 版本、构建日期与 GeckoDriver 版本0.37.1不同。这说明 Firefox 102 镜像在后续 Grid 版本中持续跟进维护发布记录的格式与机制保持稳定。该 README 也给出了一条重要的使用前提与限制项目并不保证每个 Grid 与浏览器版本的组合都被完整测试过用户需要根据自身测试需求评估并自行决策——这正是锁定标签机制的适用场景当某个 Firefox 版本因兼容性问题或测试需求需要固定时从矩阵中找到对应标签并精确拉取即可。赞分享测试后端云原生容器编排可观测性【免费下载链接】docker-seleniumProvides 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点击查看免费下载相关推荐Plano 模型服务Model Serving架构解析Bright Staff 如何以零 GPU、零独立模型服务器的方式承载 Agentic 流量Plano 模型服务Model Serving架构解析Bright Staff 如何以零 GPU、零独立模型服务器的方式承载 Agentic 流量 导读测试后端云原生容器编排可观测性docker-selenium 浏览器镜像版本化标签机制解析以 Selenium Grid 4.28.1 Firefox 107.0.1 归档记录为例docker selenium 浏览器镜像版本化标签机制解析以 Selenium Grid 4.28.1 Firefox 107.0.1 归档记录为例 S测试后端云原生容器编排可观测性ReactiveCocoa 进阶指南ReactiveSwift 之上的 Cocoa 对象拦截与 UI 绑定ReactiveCocoa 进阶指南ReactiveSwift 之上的 Cocoa 对象拦截与 UI 绑定 本文基于 Documentation/README测试后端云原生容器编排可观测性上一篇Mac 的 NTFS 硬盘为何只读5 分钟拿回完整读写的最短上手路径下一篇LX Music一个免费开源音乐播放器把六大音乐源装进同一个搜索框创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询