ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

docker-selenium Firefox 116 镜像标签全解析:从 tag_and_push_browser_images.sh 看 Node/Standalone 镜像版本化发布机制

docker-selenium Firefox 116 镜像标签全解析:从 tag_and_push_browser_images.sh 看 Node/Standalone 镜像版本化发布机制 测试后端云原生容器编排可观测性【免费下载链接】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 仓库中 CHANGELOG/archived/4.28.1/firefox_116.md 记录的 4.28.1 版本 Firefox 116 镜像打标日志为入口深入拆解 Selenium Grid 4.28.1-20250202 版本下 Firefox 116.0.3 与 GeckoDriver 0.35.0 的组合镜像所生成的全部 12 个标签。读者读完将掌握 docker-selenium 浏览器镜像的标签命名规范、tag_and_push_browser_images.sh脚本的完整执行流程、版本探测与打标原理以及如何为 Node/Standalone Firefox 镜像选择正确的固定版本标签。一、文档定位版本矩阵中的一张打标证据卡firefox_116.md是 docker-selenium 项目版本矩阵体系的产物之一。在 CHANGELOG/README.md 中每个 Grid 版本如 4.28.1都对应一张Grid 版本 × 浏览器版本矩阵表表中的每个 ✓ 都链接到对应浏览器版本的详细 changelog 文档。该文档的动机是在持续跟进最新 Selenium Grid 核心版本的同时允许用户固定浏览器版本进行跨浏览器测试或规避特定版本缺陷——用户只需找到镜像标签、拉取镜像即可开始测试。firefox_116.md记录的正是 4.28.1 发布时为 Firefox 116 系列镜像执行打标脚本的完整输出。它虽然不是一篇教程但包含了可复现的命令、确切的版本信息和完整的标签清单是理解 docker-selenium 浏览器镜像标签体系的最佳一手素材。二、命令全景一条命令生成 12 个 Firefox 镜像标签原文档以代码块形式记录了核心命令及其全部输出./tag_and_push_browser_images.sh 4.28.1 20250202 selenium false firefox true Tagging images for browser firefox, version 4.28.1, build date 20250202, namespace selenium Selenium Grid version - 4.28.1-20250202 Firefox version - 116.0.3 Short Firefox version - 116.0 GeckoDriver version - 0.35.0 Short GeckoDriver version - 0.35该脚本位于仓库根目录 tag_and_push_browser_images.sh其参数定义在脚本开头L3-L13参数位置变量名本次取值含义1VERSION4.28.1Selenium Grid 版本号2BUILD_DATE20250202构建日期YYYYMMDD3NAMESPACEselenium镜像仓库命名空间4PUSH_IMAGEfalse是否推送镜像到仓库默认false5BROWSERfirefox目标浏览器可选chrome/chromium/edge/firefox/chrome-for-testing6RELEASE_OLD_VERSIONtrue是否为旧版本补发标签默认false其中第 4 个参数在脚本中被解析为PUSH_IMAGE${4:-false}L6第 6 个参数为RELEASE_OLD_VERSION${6:-false}L8。本次PUSH_IMAGEfalse意味着只执行本地docker tag不执行docker push。在 Makefile 中这一命令被封装为tag_and_push_firefox_images目标L795-796tag_and_push_firefox_images: ./tag_and_push_browser_images.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) $(PUSH_IMAGE) firefox $(RELEASE_OLD_VERSION)其上层目标是tag_and_push_browser_imagesL781由 chrome、chrome-for-testing、chromium、edge、firefox 五个子目标串联而成对应附加浏览器镜像标签的发布流程仓库注释引用了 issue #992说明这些附加标签的由来。三、版本探测从已构建镜像内部读取真实版本打标脚本并不会凭空猜测版本号而是运行已构建好的镜像并执行二进制文件来探测版本。以 firefox 分支为例tag_and_push_browser_images.shFIREFOX_VERSION$(docker run --rm ${NAMESPACE}/node-firefox:${TAG_VERSION} firefox --version | awk {print $3}) echo Firefox version - ${FIREFOX_VERSION} FIREFOX_SHORT_VERSION$(short_version ${FIREFOX_VERSION}) echo Short Firefox version - ${FIREFOX_SHORT_VERSION} GECKODRIVER_VERSION$(docker run --rm ${NAMESPACE}/node-firefox:${TAG_VERSION} geckodriver --version | awk NR1{print $2}) echo GeckoDriver version - ${GECKODRIVER_VERSION} GECKODRIVER_SHORT_VERSION$(short_version ${GECKODRIVER_VERSION}) echo Short GeckoDriver version - ${GECKODRIVER_SHORT_VERSION}关键点探测基准镜像名为selenium/node-firefox:4.28.1-20250202TAG_VERSION${VERSION}-${BUILD_DATE}脚本 L15Firefox 版本通过firefox --version输出第 3 列取得awk {print $3}得到116.0.3GeckoDriver 版本通过geckodriver --version第一行的第 2 列取得得到0.35.0短版本号由脚本定义的short_version函数计算L53-L57只保留主版本.次版本两位function short_version() { local __long_version$1 local __version_split(${__long_version//./ }) echo ${__version_split[0]}.${__version_split[1]} }因此116.0.3 → 116.00.35.0 → 0.35。短版本标签的存在让用户无需记住完整的 Patch 号即可拉取该版本线的最近发布。这种镜像内自检的设计保证了标签与实际二进制绝对一致——标签上写什么版本容器里就是什么版本杜绝了构建参数与产物不一致的风险。在 Makefile 的firefox_upgrade_version目标中也能看到同样的验证手法构建后立即docker run校验 Selenium Server、Firefox、GeckoDriver 三个版本。四、标签命名规范12 个标签的构成逻辑原文档列出了 4.28.1 发布时为 Firefox 116 生成的完整标签清单Node 与 Standalone 各 6 个共 12 个selenium/node-firefox:116.0.3-geckodriver-0.35.0-grid-4.28.1-20250202 selenium/standalone-firefox:116.0.3-geckodriver-0.35.0-grid-4.28.1-20250202 selenium/node-firefox:116.0.3-geckodriver-0.35.0-20250202 selenium/standalone-firefox:116.0.3-geckodriver-0.35.0-20250202 selenium/node-firefox:116.0.3-20250202 selenium/standalone-firefox:116.0.3-20250202 selenium/node-firefox:116.0-geckodriver-0.35-grid-4.28.1-20250202 selenium/standalone-firefox:116.0-geckodriver-0.35-grid-4.28.1-20250202 selenium/node-firefox:116.0-geckodriver-0.35-20250202 selenium/standalone-firefox:116.0-geckodriver-0.35-20250202 selenium/node-firefox:116.0-20250202 selenium/standalone-firefox:116.0-20250202对照脚本中的FIREFOX_TAGS数组定义tag_and_push_browser_images.sh这些标签按详细度递减分为三组全版本组合最精确浏览器.Patch-geckodriver-驱动.驱动Patch-grid-Grid.构建日期即116.0.3-geckodriver-0.35.0-grid-4.28.1-20250202唯一确定一个精确到 Patch 的发布组合浏览器版本 构建日期浏览器.Patch-geckodriver-驱动.驱动Patch-构建日期与浏览器.Patch-构建日期适合在同一天发布中锁定浏览器与驱动短版本组合语义简化116.0-geckodriver-0.35-grid-4.28.1-20250202、116.0-geckodriver-0.35-20250202、116.0-20250202忽略 Patch 号让标签更短更易读。每个标签都通过retag函数同时作用于node-firefox与standalone-firefox两个镜像脚本 L232-L235这也是为什么输出中总是成对出现。旧版本补发的额外标签由于本次RELEASE_OLD_VERSIONtrue脚本跳过了 L219-L230 的追加逻辑该逻辑仅在RELEASE_OLD_VERSIONfalse时执行。若为新版本发布第 6 个参数为false还会额外追加 4 个不含构建日期的滚动式标签FIREFOX_TAGS( ${FIREFOX_VERSION}-geckodriver-${GECKODRIVER_VERSION} # 116.0.3-geckodriver-0.35.0 ${FIREFOX_VERSION} # 116.0.3 ${FIREFOX_SHORT_VERSION}-geckodriver-${GECKODRIVER_SHORT_VERSION} # 116.0-geckodriver-0.35 ${FIREFOX_SHORT_VERSION} # 116.0 )对比同一仓库最新版本 CHANGELOG/4.48.0/firefox_152.md 可以看到新版本发布时输出仍为 12 个标签但第 6 个参数为true旧版本归档。这一参数机制保证了旧版补发不会覆盖新版的滚动标签避免116.0这类短标签被历史版本反复改写。五、retag 函数本地打标与多架构镜像处理所有标签最终经由retag函数落地tag_and_push_browser_images.shfunction retag() { local __image$1 local __tag$2 local __source${NAMESPACE}/${__image}:${TAG_VERSION} if [ ${PROMOTE_TAGS} true ]; then docker buildx imagetools create ${__targets[]} ${__source} echo Tagged ${NAMESPACE}/${__image}:${__tag} return fi docker tag ${__source} ${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再执行docker pushPROMOTE_TAGS 模式由PROMOTE_TAGS环境变量触发deploy.yml 在发布提升已测试镜像时使用由于镜像从未在本地构建docker tag无法表达 registry 到 registry 的复制且docker pull只能带回单架构镜像因此改用docker buildx imagetools create在manifest index 层面完成多架构标签复制脚本头注释 L18-L30 对此有详细说明。同时可通过PROMOTE_GHCR_NAMESPACE在同一调用中镜像到 GHCR。六、镜像底层Firefox 与 GeckoDriver 如何进入镜像标签体系背后是 NodeFirefox/Dockerfile 的构建逻辑Firefox 安装L21-L70通过FIREFOX_VERSION、FIREFOX_DOWNLOAD_URL、FIREFOX_LANG_VERSION三个构建参数控制。当版本为latest/beta-latest/nightly-latest/devedition-latest/esr-latest或 amd64 架构时走 install-firefox-apt.sh配置 Mozilla 官方 apt 源并校验签名指纹35BAA0B33E9EB396F59CA838C0BA5CE6DC6315A3设置Pin-Priority: 1000优先安装其他固定版本则通过 install-firefox-package.sh 从 Mozilla CDN 下载.deb或.tar.bz2包安装。安装后执行apt-get upgrade修复 Firefox 依赖链的潜在 CVE并清理 apt 缓存。GeckoDriver 安装L75-L86默认取 GitHub releases 的latest版本按架构下载linux64或linux-aarch64包解压到/opt/geckodriver-$GK_VERSION并符号链接到/usr/bin/geckodriver。这就是打标脚本能在容器内执行geckodriver --version探测版本的前提。浏览器信息归档L93-L96构建时把浏览器名称、版本写入/opt/selenium/browsers/firefox/并生成包含moz:firefoxOptions.binary的binary_location文件供 Grid 节点自动发现浏览器能力。最终Standalone/Dockerfile 以node-firefox为基础镜像--build-arg BASEnode-firefox在同一个镜像文件系统上叠加 Selenium Server 与 VNC/noVNC 等组件因此node-firefox与standalone-firefox共享同一套浏览器/驱动版本信息——这就是同一批标签能同时打到两个镜像上的根本原因。七、实战如何选择和使用这些标签文档所属的版本矩阵CHANGELOG/README.md提醒用户并非每个 Grid 与浏览器版本的组合都经过完整测试用户需根据自身测试需求自行评估。选择标签时参考 docs/docker-hub/node-firefox.md 的 Tagging Conventions开发/快速验证使用latest如selenium/node-firefox:latest锁定浏览器主版本使用短版本如selenium/node-firefox:116.0本发布中即116.0-20250202精确定位发布使用全版本组合如selenium/node-firefox:116.0.3-geckodriver-0.35.0-grid-4.28.1-20250202可同时锁定浏览器、驱动与 Grid 三者版本固定到某个构建日期使用含-YYYYMMDD后缀的标签。启动 Node 模式以本文 4.28.1 的 Firefox 116 镜像为例docker network create grid docker run -d -p 4442-4444:4442-4444 --net grid --name selenium-hub selenium/hub:4.28.1-20250202 docker run -d --net grid -e SE_EVENT_BUS_HOSTselenium-hub \ --shm-size2g \ selenium/node-firefox:116.0.3-geckodriver-0.35.0-grid-4.28.1-20250202注意浏览器类镜像运行时需使用--shm-size2g挂载足够的主机共享内存避免浏览器进程因/dev/shm不足而崩溃。测试完成后可用docker network rm grid清理网络。八、总结firefox_116.md虽是一份发布日志却完整呈现了 docker-selenium 浏览器镜像标签体系的三个核心设计镜像内版本自检保证标签与产物一致长短双版本号在精确性与可读性之间取得平衡RELEASE_OLD_VERSION参数避免历史发布覆盖新版本的滚动标签。理解这条打标流水线无论是选择固定版本镜像做回归测试还是复现历史发布组合都能做到有的放矢。相关实现可继续在 tag_and_push_browser_images.sh、Makefile、NodeFirefox/Dockerfile 与 CHANGELOG/README.md 中深入研读。赞分享测试后端云原生容器编排可观测性【免费下载链接】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点击查看免费下载相关推荐Selenium Docker 镜像 Chrome 102 版本发布全解析tag_and_push_browser_images.sh 镜像标签机制深度解读Selenium Docker 镜像 Chrome 102 版本发布全解析tag_and_push_browser_images.sh 镜像标签机制深度解读测试后端云原生容器编排可观测性docker-selenium 4.28.1 归档版 Firefox 131 镜像标签全解析tag_and_push_browser_images.sh 的版本矩阵与发布机制docker selenium 4.28.1 归档版 Firefox 131 镜像标签全解析tag_and_push_browser_images.sh 的版测试后端云原生容器编排可观测性Selenium Grid 4.48.0 Chrome 118 镜像标签解析从 tag_and_push_browser_images.sh 看版本固化与多标签发布机制Selenium Grid 4.48.0 Chrome 118 镜像标签解析从 tag_and_push_browser_images.sh 看版本固化与多标测试后端云原生容器编排可观测性上一篇如何用org-brain构建编程学习知识网络Emacs用户的终极思维导图指南下一篇OpenDesign Cafe 设计系统使用指南从 Design Token 到组件产物的完整实践手册创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表