尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

docker-selenium 4.29.0 Firefox 123 镜像打标全解析:从发布脚本读懂 node-firefox 与 standalone-firefox 的版本管理机制

docker-selenium 4.29.0 Firefox 123 镜像打标全解析:从发布脚本读懂 node-firefox 与 standalone-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点击查看免费下载本篇技术指南以 docker-selenium 仓库中 Firefox 123 发布日志CHANGELOG/archived/4.29.0/firefox_123.md为核心线索深入剖析该项目发布 Firefox 镜像时的完整打标tagging流程如何从单一镜像派生出浏览器版本、驱动版本、Selenium Grid 版本、构建日期等多维度的 10 组标签以及node-firefox与standalone-firefox两种镜像的差异。读完本文你将掌握tag_and_push_browser_images.sh的参数语义、标签命名规则、镜像内部 Firefox/GeckoDriver 安装原理并能在自己的 CI 或发布流程中复现这一套可追溯、可回滚的镜像版本管理方案。一、发布日志原文一次典型的 Firefox 123 镜像打标记录CHANGELOG/archived/4.29.0/firefox_123.md完整记录了 Selenium Grid 4.29.0 发布周期中针对 Firefox 123.0.1 的打标输出./tag_and_push_browser_images.sh 4.29.0 20250303 selenium false firefox true Tagging images for browser firefox, version 4.29.0, build date 20250303, namespace selenium Selenium Grid version - 4.29.0-20250303 Firefox version - 123.0.1 Short Firefox version - 123.0 GeckoDriver version - 0.36.0 Short GeckoDriver version - 0.36 Tagged selenium/node-firefox:123.0.1-geckodriver-0.36.0-grid-4.29.0-20250303 Tagged selenium/standalone-firefox:123.0.1-geckodriver-0.36.0-grid-4.29.0-20250303 Tagged selenium/node-firefox:123.0.1-geckodriver-0.36.0-20250303 Tagged selenium/standalone-firefox:123.0.1-geckodriver-0.36.0-20250303 Tagged selenium/node-firefox:123.0.1-20250303 Tagged selenium/standalone-firefox:123.0.1-20250303 Tagged selenium/node-firefox:123.0-geckodriver-0.36-grid-4.29.0-20250303 Tagged selenium/standalone-firefox:123.0-geckodriver-0.36-grid-4.29.0-20250303 Tagged selenium/node-firefox:123.0-geckodriver-0.36-20250303 Tagged selenium/standalone-firefox:123.0-geckodriver-0.36-20250303 Tagged selenium/node-firefox:123.0-20250303 Tagged selenium/standalone-firefox:123.0-20250303这份日志可以被拆解为三个层次的信息命令参数层第一行展示了脚本的完整调用方式7 个位置参数逐一对应tag_and_push_browser_images.sh的入参定义。版本探测层中间 6 行是脚本运行时通过docker run进入镜像内部探测出的真实版本号——Firefox 123.0.1、GeckoDriver 0.36.0以及它们各自裁剪出的短版本 123.0、0.36。产物输出层最后 12 行是打标结果每个标签都同时打在node-firefoxSelenium Grid 分布式拓扑中的节点镜像和standalone-firefox单体模式下集成了 Hub 能力的镜像两个镜像上。值得注意的是当前仓库CHANGELOG/4.48.0/firefox_123.md中还存在同一 Firefox 123.0.1 版本在新发布周期内的另一份记录其 GeckoDriver 已升级到 0.37.1标签也随之变为123.0.1-geckodriver-0.37.1-*系列。这印证了同一浏览器版本在不同 Selenium Grid 版本周期下会产生不同的驱动搭配与标签组合也说明这份 changelog 是理解历史镜像可追溯性的关键索引。二、脚本入参语义7 个位置参数决定一次发布行为日志第一行./tag_and_push_browser_images.sh 4.29.0 20250303 selenium false firefox true对应的参数定义位于仓库根目录的 tag_and_push_browser_images.sh位置变量名日志示例值含义$1VERSION4.29.0Selenium Grid 版本号$2BUILD_DATE20250303构建日期YYYYMMDD 格式$3NAMESPACEselenium镜像命名空间即 Docker Hub 账号名$4PUSH_IMAGEfalse是否执行docker push推送镜像$5BROWSERfirefox浏览器类型chrome / chromium / edge / firefox / chrome-for-testing$6RELEASE_OLD_VERSIONtrue是否为历史版本补发标签$7PLATFORM缺省目标平台默认linux/amd64脚本开头还有两个由环境变量控制的高级开关tag_and_push_browser_images.shPROMOTE_TAGSfalse默认行为是用本地docker tag给已构建镜像附加标签当 CI 发布流程直接提升测试过的镜像而非重新构建时可设为true改用docker buildx imagetools create在 registry 与 registry 之间直接操作 manifest index从而保留多架构镜像属性详见retag()函数注释tag_and_push_browser_images.sh。PROMOTE_GHCR_NAMESPACE可选的 GHCR 命名空间用于在同一次调用中把标签镜像同步到 GitHub Container Registry。VERSION$1 BUILD_DATE$2 NAMESPACE$3 PUSH_IMAGE${4:-false} BROWSER$5 RELEASE_OLD_VERSION${6:-false} PLATFORM${7:-linux/amd64}2.1 PUSH_IMAGE 与 RELEASE_OLD_VERSION 的典型组合PUSH_IMAGERELEASE_OLD_VERSION场景falsetrue只打本地标签不推送changelog 记录即此模式便于审计truefalse打标签并推送同时生成“浮动标签”见下文第三组falsefalse本地打标签并生成浮动标签truetrue为历史版本补发带构建日期的标签并推送不触碰浮动标签从日志可以看出本次 Firefox 123 打标时RELEASE_OLD_VERSIONtrue因此没有生成纯浏览器版本号如123.0.1、纯短版本号如123.0这类“浮动标签”——这是为了避免历史版本标签覆盖当前发布通道指向的镜像保护线上最新版的可确定性。三、版本探测链路docker run 进镜像取真实版本号打标之前脚本必须先知道镜像里到底装了什么版本。以 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}这里TAG_VERSION等于${VERSION}-${BUILD_DATE}即4.29.0-20250303——发布流程先用此标签构建并暂存基础镜像脚本再基于它探测内部版本。探测命令直接用docker run --rm在临时容器内执行二进制firefox --version输出形如Mozilla Firefox 123.0.1取第 3 列得到123.0.1geckodriver --version首行输出驱动版本取第 2 列得到0.36.0short_version()函数tag_and_push_browser_images.sh把版本号按.拆分成数组后只保留前两段即123.0.1 → 123.0、0.36.0 → 0.36。function short_version() { local __long_version$1 local __version_split(${__long_version//./ }) echo ${__version_split[0]}.${__version_split[1]} }这一探测机制保证了标签内容与镜像内部二进制版本永远一致不会出现人工写错版本号导致标签与实际安装版本脱节的情况。同样的逻辑在 chrome、chromium、edge、chrome-for-testing 分支中被复用只是探测命令和取列位置不同例如 Chrome 用google-chrome --version的第 3 列、chromedriver 的第 2 列Edge 用microsoft-edge --version的第 3 列与msedgedriver --version的第 4 列。四、10 组标签的命名规则三个维度 × 长短版本日志中每行Tagged输出都来自retag函数tag_and_push_browser_images.shdocker tag ${__source} ${NAMESPACE}/${__image}:${__tag} echo Tagged ${NAMESPACE}/${__image}:${__tag} if [ ${PUSH_IMAGE} true ]; then docker push ${NAMESPACE}/${__image}:${__tag} fifirefox 分支的标签数组定义如下tag_and_push_browser_images.shFIREFOX_TAGS( ${FIREFOX_VERSION}-geckodriver-${GECKODRIVER_VERSION}-grid-${TAG_VERSION} ${FIREFOX_VERSION}-geckodriver-${GECKODRIVER_VERSION}-${BUILD_DATE} ${FIREFOX_VERSION}-${BUILD_DATE} ${FIREFOX_SHORT_VERSION}-geckodriver-${GECKODRIVER_SHORT_VERSION}-grid-${TAG_VERSION} ${FIREFOX_SHORT_VERSION}-geckodriver-${GECKODRIVER_SHORT_VERSION}-${BUILD_DATE} ${FIREFOX_SHORT_VERSION}-${BUILD_DATE} ) if [ ${RELEASE_OLD_VERSION} false ]; then FIREFOX_TAGS( ${FIREFOX_VERSION}-geckodriver-${GECKODRIVER_VERSION} ${FIREFOX_VERSION} ${FIREFOX_SHORT_VERSION}-geckodriver-${GECKODRIVER_SHORT_VERSION} ${FIREFOX_SHORT_VERSION} ) fi10 组标签本次日志因RELEASE_OLD_VERSIONtrue输出 6 组可按语义归纳如下标签类别构成日志实例适用场景完整锁定标签browser-geckodriver-driver-grid-grid-build123.0.1-geckodriver-0.36.0-grid-4.29.0-20250303最精确锁定四要素齐全可用于回归定位驱动构建标签browser-geckodriver-driver-build123.0.1-geckodriver-0.36.0-20250303锁定浏览器与驱动版本组合浏览器构建标签browser-build123.0.1-20250303同一浏览器版本的多日期构建区分短版本完整锁定short-geckodriver-short-grid-grid-build123.0-geckodriver-0.36-grid-4.29.0-20250303短版本号更易记忆仍保持完整锁定短版本驱动构建short-geckodriver-short-build123.0-geckodriver-0.36-20250303短版本号组合锁定短版本构建short-build123.0-20250303短版本号日常使用浮动标签仅 RELEASE_OLD_VERSIONfalse123.0.1、123.0、123.0.1-geckodriver-0.36.0、123.0-geckodriver-0.36—随最新构建滚动更新面向日常docker pull用户从源码结构看这套“长/短版本 × 锁定/浮动”的设计意图很明确长版本标签适合 CI 精确复现短版本标签方便人工识别构建日期维度保证同一版本可多次重建而不互相覆盖。每个标签都会被for循环依次施加到node-firefox与standalone-firefox两个镜像上。五、node-firefox 与 standalone-firefox两种部署形态的同一镜像内核日志中每个标签都成对出现node-firefox与standalone-firefox二者并非内容不同的两套构建而是同一浏览器镜像内核在不同 Selenium Grid 部署拓扑下的两种角色node-firefox作为 Grid 分布式部署中的节点通过 docker-compose-v3.yml 与selenium-hub组成 Hub-Node 拓扑。容器启动时依赖环境变量SE_EVENT_BUS_HOST定位 Hub 的 EventBus并建议设置shm_size: 2gb保证浏览器共享内存充足firefox: image: selenium/node-firefox:4.48.0-20260905 shm_size: 2gb depends_on: - selenium-hub environment: - SE_EVENT_BUS_HOSTselenium-hubstandalone-firefox把所有 Grid 组件Router、Distributor、SessionMap 等整合进单容器无需外部 Hub 即可独立对外提供 WebDriver 端点。其启动入口 Standalone/start-selenium-standalone.sh 会以standalone模式启动 selenium-server.jar并通过--detect-drivers false显式关闭驱动自动探测转而依赖镜像内固定的 geckodriver 路径java ${SE_JAVA_OPTS} \ ${GECKO_DRIVER_PATH_PROPERTY} \ -jar /opt/selenium/selenium-server.jar \ ${EXTRA_LIBS} standalone \ --session-request-timeout ${SE_SESSION_REQUEST_TIMEOUT} \ --session-retry-interval ${SE_SESSION_RETRY_INTERVAL} \ --healthcheck-interval ${SE_HEALTHCHECK_INTERVAL} \ --relax-checks ${SE_RELAX_CHECKS} \ --detect-drivers false \ --bind-host ${SE_BIND_HOST} \ --config ${CONFIG_FILE} \ ${SE_OPTS}GECKO_DRIVER_PATH_PROPERTY在 NodeBase/start-selenium-node.sh 与 Standalone/start-selenium-standalone.sh 中均被定义为-Dwebdriver.gecko.driver/usr/bin/geckodriver与 NodeFirefox 镜像构建阶段把 geckodriver 软链到/usr/bin/geckodriver的位置严格对应见下文第六节。六、镜像内部实现Firefox 与 GeckoDriver 如何进入镜像node-firefox镜像由 NodeFirefox/Dockerfile 构建它以node-base为基础镜像默认ARG BASEnode-base、ARG NAMESPACEselenium并按需把 Firefox、语言包与 GeckoDriver 注入其中。6.1 Firefox 安装策略deb 包优先tar.bz2/tar.xz 兜底Dockerfile 中的安装逻辑NodeFirefox/Dockerfile由三个构建参数驱动FIREFOX_VERSION默认latest指定 Firefox 版本FIREFOX_DOWNLOAD_URL可显式指定下载地址FIREFOX_LANG_VERSION语言包版本默认跟随FIREFOX_VERSION。构建时先根据dpkg --print-architecture判定 amd64/aarch64再分两条主路径安装APT 通道install-firefox-apt.sh为latest、beta-latest、nightly-latest、devedition-latest、esr-latest等发布通道准备。脚本从packages.mozilla.org导入 Mozilla 官方签名密钥校验指纹35BAA0B33E9EB396F59CA838C0BA5CE6DC6315A3写入mozilla.list源并设置Pin-Priority: 1000的 apt 优先级随后安装firefox、firefox-beta等对应包。包文件通道install-firefox-package.sh针对固定版本号。脚本优先从 Mozilla CDN 下载.deb包安装NodeFirefox/Dockerfile 先探测下载地址是否 404若 404 则回退到.tar.bz2对压缩包场景解压到/opt/firefox-version后软链/usr/bin/firefox并预先创建distribution/extensions目录。安装完成后 Dockerfile 还会调用 get_lang_package.sh 拉取对应版本的语言包并执行一次apt-get upgrade修复 Firefox 依赖库可能存在的 CVE。6.2 GeckoDriver 安装跟随 release/latest 或锁定版本GeckoDriver 安装段NodeFirefox/Dockerfile由GECKODRIVER_VERSION默认latest控制默认先请求https://github.com/mozilla/geckodriver/releases/latest解析出最新版本号再按架构选择linux64或linux-aarch64压缩包下载解压后放入/opt/geckodriver-version并软链到/usr/bin/geckodriverARG GECKODRIVER_VERSIONlatest RUN LATEST_VERSION$(curl -s -L -o /dev/null -w %{url_effective}\n https://github.com/mozilla/geckodriver/releases/latest | sed -E s#.*/tag/(v[0-9.]).*#\1#) \ DRIVER_ARCH$(if [ $(dpkg --print-architecture) amd64 ]; then echo linux64; else echo linux-aarch64; fi) \ GK_VERSION$(if [ ${GECKODRIVER_VERSION:-latest} latest ]; then echo ${LATEST_VERSION}; else echo $GECKODRIVER_VERSION; fi) \ echo Using GeckoDriver version: $GK_VERSION \ wget --no-verbose -O /tmp/geckodriver.tar.gz https://github.com/mozilla/geckodriver/releases/download/${GK_VERSION}/geckodriver-${GK_VERSION}-${DRIVER_ARCH}.tar.gz \ rm -rf /opt/geckodriver \ tar -C /opt -zxf /tmp/geckodriver.tar.gz \ rm /tmp/geckodriver.tar.gz \ mv /opt/geckodriver /opt/geckodriver-$GK_VERSION \ chmod 755 /opt/geckodriver-$GK_VERSION \ ln -fs /opt/geckodriver-$GK_VERSION /usr/bin/geckodriver这正是日志中 GeckoDriver 0.36.0 的来源发布流程以GECKODRIVER_VERSION0.36.0之类的锁定值构建镜像脚本再进镜像探测确认。6.3 浏览器元数据供 Selenium Grid 自动发现 Firefox构建末尾NodeFirefox/Dockerfile把 Firefox 名称、版本号和二进制路径写入/opt/selenium/browsers/firefox/目录Grid 节点启动时会读取这些元数据以注册 Firefox 插槽RUN mkdir -p /opt/selenium/browsers/firefox \ echo firefox /opt/selenium/browsers/firefox/name \ firefox --version | awk {print $3} /opt/selenium/browsers/firefox/version \ echo {moz:firefoxOptions: {binary: ${SE_BROWSER_BINARY_LOCATION:-/usr/bin/firefox}}} /opt/selenium/browsers/firefox/binary_location同时镜像声明了SE_OTEL_SERVICE_NAMEselenium-node-firefox与SE_NODE_ENABLE_MANAGED_DOWNLOADStrueNodeFirefox/Dockerfile后者会在节点启动脚本中转换为--enable-managed-downloads参数NodeBase/start-selenium-node.sh允许会话期间由节点统一管理下载目录。6.4 残留进程清理firefox-cleanup 守护进程NodeFirefox/firefox-cleanup.sh 被 supervisord 以守护进程方式拉起周期性清理运行超过SE_BROWSER_LEFTOVERS_PROCESSES_SECS秒的firefox-bin残留进程防止测试异常退出后僵尸 Firefox 进程占满节点资源清理间隔由SE_BROWSER_LEFTOVERS_INTERVAL_SECS控制。二者默认值在NodeBase的环境变量定义中配置可在 compose 文件中覆盖调优。七、如何使用这份 changelog 定位历史镜像对于使用者而言CHANGELOG/archived/4.29.0/firefox_123.md最大的价值是一份可复现的镜像溯源表。当线上测试环境报出与 Firefox 123 相关的问题时可以按如下路径排查在归档 changelog 中检索firefox_123.md确认目标环境所需的 Selenium Grid 版本如 4.29.0下 Firefox 与 GeckoDriver 的精确组合123.0.10.36.0从 10 组标签中选择合适粒度CI 复现用完整锁定标签selenium/node-firefox:123.0.1-geckodriver-0.36.0-grid-4.29.0-20250303日常验证用短版本标签selenium/node-firefox:123.0-20250303通过docker pull拉取对应标签并可用docker run --rm image firefox --version与docker run --rm image geckodriver --version复核镜像内版本与 changelog 记录是否一致需要对比新周期行为时查阅CHANGELOG/4.48.0/firefox_123.md观察同版本 Firefox 在新 Grid 版本下搭配的 GeckoDriver0.37.1与标签差异。八、小结从一份 21 行的打标日志出发可以完整还原 docker-selenium 的 Firefox 镜像发布管线发布脚本tag_and_push_browser_images.sh用 7 个位置参数控制一次发布以docker run进镜像探测真实版本再按“长/短版本 × 锁定/浮动 × 构建日期”三个维度生成 10 组标签同时作用于node-firefox与standalone-firefox镜像构建由NodeFirefox/Dockerfile完成Firefox 支持 APT 通道与 deb/压缩包双路径安装GeckoDriver 默认跟随最新发布或锁定版本元数据与清理脚本保证 Grid 节点可被自动发现并长期稳定运行changelog 文件是发布过程的最终审计记录每一行标签都可反推出该镜像内部的浏览器、驱动、Grid 版本与构建日期是历史版本排查与 CI 精确锁定的第一手资料。这套“探测 → 打标 → 审计”的体系不仅适用于 Firefox同样被 chrome、chromium、edge、chrome-for-testing 分支复用tag_and_push_browser_images.sh是 docker-selenium 多浏览器镜像版本治理的统一范式。赞分享测试后端云原生容器编排可观测性【免费下载链接】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 Firefox 116 镜像标签全解析从 tag_and_push_browser_images.sh 看 Node/Standalone 镜像版本化发布机制docker selenium Firefox 116 镜像标签全解析从 tag_and_push_browser_images.sh 看 Node/Stan测试后端云原生容器编排可观测性docker-selenium Firefox 144 发布记录node-firefox / standalone-firefox 镜像标签体系与 GeckoDriver 0.37.1 版本解析实战docker selenium Firefox 144 发布记录node firefox / standalone firefox 镜像标签体系与 Gecko测试后端云原生容器编排可观测性docker-selenium 4.29.0 Firefox 116 镜像发布解析tag_and_push_browser_images.sh 多标签生成机制与 node-firefox 使用指南docker selenium 4.29.0 Firefox 116 镜像发布解析tag_and_push_browser_images.sh 多标签生成机制测试后端云原生容器编排可观测性上一篇openai-agents-python 沙箱客户端完全指南本地、Docker 与托管后端的选型与挂载实战下一篇WeKnora 完整指南把散落各处的文档变成可问答的开源知识库创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表