docker-selenium 4.32.0 发布档案解读:Firefox 133.0.3 镜像的多标签生成与使用全流程
测试后端云原生容器编排可观测性【免费下载链接】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点击查看免费下载本篇指南以仓库 CHANGELOG 归档中的 Firefox 133 发布记录CHANGELOG/archived/4.32.0/firefox_133.md为核心讲解 docker-selenium 在 Selenium Grid 4.32.0 版本下如何为 Firefox 133.0.3 GeckoDriver 0.36.0 生成node-firefox与standalone-firefox两套共 20 个镜像标签。读完本文你将掌握镜像标签的命名规则、tag_and_push_browser_images.sh的完整执行逻辑以及如何按标签精确拉取与运行对应版本的 Firefox 浏览器节点。发布记录原文一次完整的镜像打标输出firefox_133.md记录的是通过仓库根目录脚本 tag_and_push_browser_images.sh 为 Firefox 133 打标签并发布的完整命令与输出。原文内容如下./tag_and_push_browser_images.sh 4.32.0 20250505 selenium false firefox true Tagging images for browser firefox, version 4.32.0, build date 20250505, namespace selenium Selenium Grid version - 4.32.0-20250505 Firefox version - 133.0.3 Short Firefox version - 133.0 GeckoDriver version - 0.36.0 Short GeckoDriver version - 0.36 Tagged selenium/node-firefox:133.0.3-geckodriver-0.36.0-grid-4.32.0-20250505 Tagged selenium/standalone-firefox:133.0.3-geckodriver-0.36.0-grid-4.32.0-20250505 Tagged selenium/node-firefox:133.0.3-geckodriver-0.36.0-20250505 Tagged selenium/standalone-firefox:133.0.3-geckodriver-0.36.0-20250505 Tagged selenium/node-firefox:133.0.3-20250505 Tagged selenium/standalone-firefox:133.0.3-20250505 Tagged selenium/node-firefox:133.0-geckodriver-0.36-grid-4.32.0-20250505 Tagged selenium/standalone-firefox:133.0-geckodriver-0.36-grid-4.32.0-20250505 Tagged selenium/node-firefox:133.0-geckodriver-0.36-20250505 Tagged selenium/standalone-firefox:133.0-20250505 Tagged selenium/node-firefox:133.0-20250505 Tagged selenium/standalone-firefox:133.0-20250505从输出可以提炼出本次发布的三组版本事实组件版本Selenium Grid4.32.0构建日期 20250505合并标识4.32.0-20250505Firefox133.0.3短版本 133.0GeckoDriver0.36.0短版本 0.36脚本调用链Makefile 如何驱动打标tag_and_push_browser_images.sh并不是独立手动执行的而是由仓库根目录 Makefile 中的 target 编排。Makefile 第 781 行定义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其中 Firefox 对应的 target 为Makefile 第 795-796 行tag_and_push_firefox_images: ./tag_and_push_browser_images.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) $(PUSH_IMAGE) firefox $(RELEASE_OLD_VERSION)对照发布记录中的命令可以确定各位置参数的实际含义位置参数值含义$1VERSION4.32.0Selenium Grid 发布版本号$2BUILD_DATE20250505构建日期YYYYMMDD$3NAMESPACEseleniumDocker Hub 命名空间决定镜像全名前缀$4PUSH_IMAGEfalse是否执行docker push推送$5BROWSERfirefox浏览器类型脚本内case分支入口$6RELEASE_OLD_VERSIONtrue是否保留旧版本浮动标签脚本开头还支持两个由环境变量注入的选项PROMOTE_TAGS默认false与PROMOTE_GHCR_NAMESPACE默认空它们与 release 流程中“直接提升已测试镜像而不是重新构建”的路径相关详见下文 retag 小节。版本探测先运行镜像再解析版本号脚本进入firefox分支tag_and_push_browser_images.sh 第 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})这里的关键点是基础镜像 tag 是selenium/node-firefox:4.32.0-20250505即TAG_VERSION${VERSION}-${BUILD_DATE}脚本第 15 行Firefox 版本从firefox --version输出的第三列取得到133.0.3GeckoDriver 版本从geckodriver --version输出的第一行第二列取得到0.36.0两个docker run都使用--rm即临时容器运行完毕即清理不打乱镜像层。随后通过short_version函数第 53-57 行截取主次版本function short_version() { local __long_version$1 local __version_split(${__long_version//./ }) echo ${__version_split[0]}.${__version_split[1]} }即按.切分后取前两段133.0.3→133.00.36.0→0.36。短版本的存在意义是让用户可以用“大版本 次版本”的宽松标签如133.0自动跟随同一次版本内的补丁更新详见下文标签规则。标签生成规则20 个标签的排列组合FIREFOX_TAGS数组tag_and_push_browser_images.sh 第 206-230 行在两种版本维度长/短与三种信息维度浏览器、驱动、Grid之间做排列每一组组合都会同时打到node-firefox与standalone-firefox两个镜像名上因此共生成 20 条Tagged输出。先看基础 12 个标签每组 6 个每个镜像名各得 6 个它们在发布记录中均可逐条对应标签模式实际标签node-firefox 示例语义${FIREFOX_VERSION}-geckodriver-${GECKODRIVER_VERSION}-grid-${TAG_VERSION}133.0.3-geckodriver-0.36.0-grid-4.32.0-20250505完整四要素浏览器补丁版本 驱动版本 Grid 版本 日期可精确定位${FIREFOX_VERSION}-geckodriver-${GECKODRIVER_VERSION}-${BUILD_DATE}133.0.3-geckodriver-0.36.0-20250505浏览器补丁版本 驱动版本 日期${FIREFOX_VERSION}-${BUILD_DATE}133.0.3-20250505浏览器补丁版本 日期${FIREFOX_SHORT_VERSION}-geckodriver-${GECKODRIVER_SHORT_VERSION}-grid-${TAG_VERSION}133.0-geckodriver-0.36-grid-4.32.0-20250505短版本四要素组合${FIREFOX_SHORT_VERSION}-geckodriver-${GECKODRIVER_SHORT_VERSION}-${BUILD_DATE}133.0-geckodriver-0.36-20250505短版本 驱动 日期${FIREFOX_SHORT_VERSION}-${BUILD_DATE}133.0-20250505短版本 日期当RELEASE_OLD_VERSIONfalse时脚本还会追加 4 个不带日期、用于滚动更新的浮动标签第 219-229 行${FIREFOX_VERSION}-geckodriver-${GECKODRIVER_VERSION}、${FIREFOX_VERSION}、${FIREFOX_SHORT_VERSION}-geckodriver-${GECKODRIVER_SHORT_VERSION}、${FIREFOX_SHORT_VERSION}。值得注意的是发布记录中的命令第 6 个参数为true即本次发布属于“发布旧版本镜像”场景因此输出中只有日期化的 6 类标签没有出现selenium/node-firefox:133.0.3这类不带日期的浮动标签——这正是RELEASE_OLD_VERSIONtrue的实际可见效果也解释了归档记录与最新版发布输出之间的差异。retag 与推送docker tag、docker push 与 imagetools所有标签都通过retag函数tag_and_push_browser_images.sh 第 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即先在本地为同一个镜像创建别名 tag再按PUSH_IMAGE参数决定是否逐条推送。本次记录中PUSH_IMAGEfalse因此只输出Tagged ...而不执行推送与日志完全吻合。retag还包含一条特殊路径当PROMOTE_TAGStrue时镜像并不在本地构建而是通过docker buildx imagetools create直接在 registry 之间为多架构 manifestindex添加标签并可借助PROMOTE_GHCR_NAMESPACE在同一次调用中同步镜像到 GHCR脚本第 36-44 行注释对此有详细说明。这与 Makefile 第 798-808 行的tag_and_push_browser_images_ghcrtarget 相互配合保证 GHCR 镜像与 Docker Hub 保持同一套标签。镜像标签的实际使用Node 与 Standalone 两种部署发布记录中同时打标的node-firefox与standalone-firefox对应两种不同的 Selenium Grid 拓扑使用方式在 docs/docker-hub/node-firefox.md 与 docs/docker-hub/standalone-firefox.md 中有完整示例。Node 模式接入 Selenium Grid HubNode 镜像需要与 Hub 在同一 Docker 网络内通过容器名互相发现# 1. 创建网络 docker network create grid # 2. 启动 Hub docker run -d -p 4442-4444:4442-4444 --net grid --name selenium-hub selenium/hub:latest # 3. 启动 Firefox 节点固定到本次发布的具体版本 docker run -d --net grid -e SE_EVENT_BUS_HOSTselenium-hub \ --shm-size2g \ selenium/node-firefox:133.0.3-geckodriver-0.36.0-grid-4.32.0-20250505 # 4. 将 WebDriver 测试指向 http://localhost:4444Windows PowerShell 下将行尾\替换为即可。容器内可通过 http://localhost:7900/?autoconnect1resizescalepasswordsecret 查看运行画面。Standalone 模式单容器即完整 Griddocker run -d -p 4444:4444 -p 7900:7900 --shm-size2g \ selenium/standalone-firefox:133.0.3-geckodriver-0.36.0-grid-4.32.0-20250505无论哪种模式官方文档都强调凡含浏览器的镜像必须使用--shm-size2g以使用宿主共享内存否则浏览器进程可能因/dev/shm空间不足而崩溃同时建议使用完整标签如上面带-grid-的长标签锁定浏览器与 Grid 版本而不是依赖latest。latest仅是 Makefile 中tag_latesttarget第 828 行起在发布收尾阶段为最新版本追加的便捷别名。底层镜像支撑Firefox 133.0.3 与 GeckoDriver 0.36.0 的安装逻辑发布记录中的版本号并非凭空而来而是由 NodeFirefox/Dockerfile 的构建参数决定。该 Dockerfile 支持FIREFOX_VERSION默认latest与GECKODRIVER_VERSION默认latest两个构建参数Firefox 部分Dockerfile 第 21-70 行当指定数字版本时优先拼接 Mozilla CDN 的.deb下载地址若返回 404 则回退到.tar.bz2包安装交给 NodeFirefox/install-firefox-package.sh该脚本会针对.deb、.tar.bz2、.tar.xz三种包类型分别处理并在/opt/firefox-${FIREFOX_VERSION}下建立distribution/extensions目录、以软链接将二进制暴露为/usr/bin/firefox语言包Dockerfile 第 66 行调用 NodeFirefox/get_lang_package.sh从 Mozilla FTP 抓取对应版本的全部.xpi语言包重命名为langpack-localefirefox.mozilla.org.xpi后装入扩展目录GeckoDriver 部分Dockerfile 第 75-86 行动态解析 GitHub Releases 的最新 tag按linux64/linux-aarch64选择驱动架构压缩包解压后软链接到/usr/bin/geckodriver构建收尾Dockerfile 第 93-96 行将firefox名称、版本号及moz:firefoxOptions.binary的 JSON 模板写入/opt/selenium/browsers/firefox/供 Selenium Grid 节点注册时上报浏览器能力。也就是说firefox_133.md中探测到的133.0.3与0.36.0正是这一构建链路在 4.32.0 版本构建参数下的产物。归档与矩阵这条记录在 CHANGELOG 中的位置firefox_133.md位于CHANGELOG/archived/4.32.0/目录下属于已归档版本。CHANGELOG 的维护逻辑由 CHANGELOG/generate-matrix-readme.py 支撑脚本会扫描形如x.y.z的 Grid 版本目录将除最新版本以外的目录整体移动到archived/下脚本第 10-45 行的archive_old_versions函数并按firefox_133.md这类browser_version.md的文件命名生成版本矩阵 READMEscan_changelog函数。在 CHANGELOG/README.md 的 “Archived Grid Versions → Firefox” 表格中4.32.0行包含从firefox_98.md到firefox_137.md的 40 个版本链接firefox_133.md即其中之一。矩阵表头是浏览器大版本号因此无论是133.0.3还是133.0.2见同目录下的 firefox_134.md 可对照同批次其他版本都归入133这一列。README 的说明也明确指出每个 ✓ 都链接到对应 Grid 版本下该浏览器版本的详细 changelog且仓库并未对所有 Grid × 浏览器组合做全量测试用户需要按自己的测试需求评估选择——这正是这份发布档案作为“事实记录”而非“兼容性承诺”的定位。小结通过解读 CHANGELOG/archived/4.32.0/firefox_133.md 这份发布档案我们可以完整还原 docker-selenium 的一次 Firefox 版本发布从 Makefile 的 target 编排到 tag_and_push_browser_images.sh 的版本探测、短版本截取与 20 个标签的排列生成再到 NodeFirefox/Dockerfile 对 Firefox 133.0.3 与 GeckoDriver 0.36.0 的底层安装最后落到 docs/docker-hub/node-firefox.md 与 docs/docker-hub/standalone-firefox.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点击查看免费下载相关推荐SDL2 触控输入开发指南从 README-touch 到触摸事件 API 的完整实战解析SDL2 触控输入开发指南从 README touch 到触摸事件 API 的完整实战解析 导读 本文以当前仓库中随 SDL2 2.0.10 一同发布的官方文测试后端云原生容器编排可观测性OptiScaler 完整上手教程把任何显卡的游戏上采样自由换装DLSS/XeSS/FSR 全都能换OptiScaler 完整上手教程把任何显卡的游戏上采样自由换装DLSS/XeSS/FSR 全都能换 OptiScaler 是一个免费开源的中间层工具游测试后端云原生容器编排可观测性10 分钟配好大麦自动抢票抢下秒光演唱会门票的实战入门指南10 分钟配好大麦自动抢票抢下秒光演唱会门票的实战入门指南 热门演出开售不到三秒页面就弹出了售罄——这是大多数人抢演唱会门票的真实处境。大麦自动抢票就是测试后端云原生容器编排可观测性上一篇cnn-explainer中的集成测试从用户流程到系统交互下一篇告别电池焦虑AlDente-Charge-Limiter背后的MIT许可证全解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考