ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

docker-selenium 浏览器镜像 Tag 机制解析:以 Selenium Grid 4.34.0 + Firefox 114.0.2 发布记录为例

docker-selenium 浏览器镜像 Tag 机制解析:以 Selenium Grid 4.34.0 + Firefox 114.0.2 发布记录为例 测试后端云原生容器编排可观测性【免费下载链接】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.34.0/firefox_114.md深入剖析 Selenium Grid 4.34.0 构建日期 20250727 中 Firefox 镜像的 Tag 命名规范、生成流程与底层实现。通过阅读本文你将掌握node-firefox与standalone-firefox镜像从构建、版本探测到多格式打标、推送的完整链路理解长短版本号、GeckoDriver 版本、Grid 版本与构建日期在 Tag 中的组合规则并能够在自己的发布流程中复现这一套脚本化的 Tag 管理方法。一、这份发布记录记录了什么firefox_114.md是 4.34.0 版本浏览器镜像发布日志中针对 Firefox 的部分同目录下还有chrome_114.md、edge_114.md等同类记录完整保留了一次真实发布命令的执行输出。其核心内容如下./tag_and_push_browser_images.sh 4.34.0 20250727 selenium false firefox true命令执行后输出了本次发布的关键版本事实Selenium Grid 版本4.34.0-20250727Firefox 版本114.0.2短版本114.0GeckoDriver 版本0.36.0短版本0.36这四个版本号构成了后续所有镜像 Tag 的命名原料。该脚本位于仓库根目录 tag_and_push_browser_images.sh是浏览器镜像发布打标的统一入口。二、命令参数逐项解读发布命令共携带 7 个参数与脚本头部的参数解析一一对应tag_and_push_browser_images.sh位置本记录中的值参数名含义$14.34.0VERSIONSelenium Grid 版本号$220250727BUILD_DATE构建日期TAG_VERSION${VERSION}-${BUILD_DATE}拼接成4.34.0-20250727$3seleniumNAMESPACE镜像命名空间仓库名最终镜像名为selenium/node-firefox等$4falsePUSH_IMAGE是否执行docker pushfalse表示本次只打标不推送$5firefoxBROWSER浏览器类型脚本内通过case分支分发处理逻辑$6trueRELEASE_OLD_VERSION是否为旧版本补发 Tag。true时只打基础 6 种 Tagfalse时追加 4 种裸版本 Tag$7未传PLATFORM目标平台默认linux/amd64值得注意第 6 个参数true直接决定了本次输出只有 6 种 Tag 模式。查看脚本 firefox 分支可知FIREFOX_TAGS数组的基础成员固定为 6 个而当RELEASE_OLD_VERSIONfalse时会再追加 4 个成员见下文第四节这也是归档版本只打精简 Tag 的设计考量。三、本次发布生成的 12 个镜像 Tag 全清单以node-firefox与standalone-firefox两个镜像为准本次共生成 12 个 Tag可归纳为 6 组一一对应的模式序号Tagnode-firefox / standalone-firefox 各一份命名模式1114.0.2-geckodriver-0.36.0-grid-4.34.0-20250727完整版本 驱动完整版本 Grid 完整版本2114.0.2-geckodriver-0.36.0-20250727完整版本 驱动完整版本 构建日期3114.0.2-20250727浏览器完整版本 构建日期4114.0-geckodriver-0.36-grid-4.34.0-20250727短版本 驱动短版本 Grid 完整版本5114.0-geckodriver-0.36-20250727短版本 驱动短版本 构建日期6114.0-20250727浏览器短版本 构建日期这 6 组模式在脚本中的定义位置为 tag_and_push_browser_images.sh脚本注释明确区分了Browser version and browser driver version plus build date、Browser version and build date与短版本Short versions三类语义方便使用者按不同精确度拉取镜像。四、脚本实现原理从版本探测到批量打标4.1 版本探测容器内自报版本脚本并不假设版本号而是直接运行已构建的镜像让容器内的二进制自报版本firefox 分支tag_and_push_browser_images.shFIREFOX_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})firefox --version输出形如Mozilla Firefox 114.0.2取第 3 列得到114.0.2geckodriver --version首行即为版本号取NR1的第 2 列得到0.36.0。这一设计保证了 Tag 与镜像内真实软件版本严格一致避免了硬编码漂移。4.2 短版本截取short_version()函数tag_and_push_browser_images.sh按.切分版本号并只取前两段function short_version() { local __long_version$1 local __version_split(${__long_version//./ }) echo ${__version_split[0]}.${__version_split[1]} }因此114.0.2→114.00.36.0→0.36与发布日志输出的 Short Firefox version - 114.0、Short GeckoDriver version - 0.36 完全吻合。4.3 打标与推送retag函数retag()tag_and_push_browser_images.sh承担核心动作本地docker tag后按PUSH_IMAGE决定是否docker push。脚本末尾对FIREFOX_TAGS数组逐项循环同时为node-firefox与standalone-firefox各打一份tag_and_push_browser_images.sh这就是 12 个 Tag6 模式 × 2 镜像的由来。4.4 常规发布会额外追加 4 组 Tag当RELEASE_OLD_VERSIONfalse即常规版本发布时脚本追加以下 4 个成员tag_and_push_browser_images.sh114.0.2-geckodriver-0.36.0浏览器完整版本 驱动完整版本114.0.2浏览器完整版本114.0-geckodriver-0.36短版本 驱动短版本114.0浏览器短版本从源码结构看这些裸版本 Tag 是给用户提供最简洁的拉取入口如selenium/node-firefox:114.0而归档旧版本时省略它们以降低维护成本。本记录因第 6 个参数为true故输出中未包含这 4 组。五、Firefox 镜像构建侧源码印证版本探测之所以可靠是因为镜像构建时已固化软件版本并写入元信息。见 NodeFirefox/Dockerfile5.1 Firefox 本体安装策略构建参数FIREFOX_VERSIONlatest、FIREFOX_DOWNLOAD_URL、FIREFOX_LANG_VERSION控制安装方式NodeFirefox/Dockerfile对latest/beta-latest/nightly-latest/devedition-latest/esr-latest及 Firefox 136 使用 Mozilla 官方 APT 仓库脚本 NodeFirefox/install-firefox-apt.sh 完成 keyring 安装与Pin-Priority: 1000偏好设置对具体版本号走 NodeFirefox/install-firefox-package.sh优先下载官方.deb包404 时回退.tar.bz2并对 beta/nightly/dev/esr 建立/usr/bin/firefox软链随后执行 NodeFirefox/get_lang_package.sh 下载对应版本的全部语言包到distribution/extensions。5.2 GeckoDriver 安装GECKODRIVER_VERSIONlatest时动态解析上游最新发布按架构选择linux64或linux-aarch64压缩包解压到/opt/geckodriver-$GK_VERSION并软链到/usr/bin/geckodriverNodeFirefox/Dockerfile。5.3 浏览器信息落盘构建末尾将版本信息写入/opt/selenium/browsers/firefox/供 Grid Node 注册时上报NodeFirefox/DockerfileRUN 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。5.4 构建入口与升级验证Makefile 提供firefox/firefox_only构建目标firefox: node_base firefox_only并支持FIREFOX_DOWNLOAD_URL覆盖Makefile 的tag_and_push_firefox_images目标正是本次发布命令的 Make 封装tag_and_push_firefox_images: ./tag_and_push_browser_images.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) $(PUSH_IMAGE) firefox $(RELEASE_OLD_VERSION)而firefox_upgrade_version目标Makefile在升级后依次验证selenium-server.jar、firefox --version、geckodriver --version三者的版本一致性。六、使用这些镜像运行 Firefox 自动化6.1 单容器快速体验docker run -d -p 4444:4444 -p 7900:7900 --shm-size2g selenium/standalone-firefox:4.48.0-20260905其中--shm-size2g是 Selenium 容器公认的推荐配置README 中 README.md 明确建议端口 4444 为 Grid 入口7900 为 noVNC 可视化调试入口。Firefox 依赖共享内存运行容量不足会导致浏览器崩溃。6.2 接入分布式 Grid在 Hub Node 模式下将node-firefox挂入selenium-hub并通过事件总线通信参见 docker-compose-v3.yml 的 firefox 服务定义firefox: image: selenium/node-firefox:4.48.0-20260905 shm_size: 2gb depends_on: - selenium-hub environment: - SE_EVENT_BUS_HOSTselenium-hub在多浏览器 Node 上可通过环境变量SE_NODE_ENABLE_BROWSER_FIREFOXfalse按需关闭 Firefox 能力README 多架构矩阵一节 README.md。6.3 设置浏览器语言与区域Firefox 的语言/区域需同时设置 profile 偏好并安装语言包 add-onREADME.mdprofile webdriver.FirefoxProfile() profile.set_preference(intl.accept_languages, vi-VN,vi) profile.set_preference(intl.locale.requested, vi-VN,vi) options FirefoxOptions() options.profile profile driver webdriver.Remote(optionsoptions, command_executorhttp://selenium-hub:4444/wd/hub) webdriver.Firefox.install_addon(driver, /local/path/to/vi.xpi)语言包可借助 NodeFirefox/get_lang_package.sh 批量获取README.mdFIREFOX_VERSION$(docker run --rm --entrypoint selenium/node-firefox:latest firefox --version | awk {print $3}) \ ./NodeFirefox/get_lang_package.sh ${FIREFOX_VERSION} /local/path/to/download七、僵尸进程清理与运维保障镜像内置了 Firefox 专用清理守护进程 NodeFirefox/firefox-cleanup.sh按周期找出运行超过阈值秒数的firefox-bin进程并kill -9配合 NodeFirefox/firefox-cleanup.conf 注册到 supervisordpriority20由SE_ENABLE_BROWSER_LEFTOVERS_CLEANUP控制启停。相关环境变量及默认值记录在 ENV_VARIABLES.md环境变量默认值说明SE_BROWSER_LEFTOVERS_PROCESSES_SECS7200超过该存活秒数的 Firefox 进程将被清理SE_BROWSER_LEFTOVERS_INTERVAL_SECS3600清理守护进程的检查间隔SE_BROWSER_LEFTOVERS_TEMPFILES_DAYS1/tmp残留临时文件清理天数Firefox 场景忽略结语通过一份归档的 Firefox 发布日志本文完整还原了 docker-selenium 浏览器镜像 Tag 生成的工程闭环构建期在 NodeFirefox/Dockerfile 内固化浏览器与驱动版本发布期由 tag_and_push_browser_images.sh 以容器自报版本为准生成 6 至 10 组语义化 Tag再经 Make 目标 Makefile 统一编排。理解了这套机制无论是追溯历史版本如114.0-geckodriver-0.36-grid-4.34.0-20250727、按需拉取精简 Tag如114.0还是自定义镜像版本管理流程都能做到有据可依、可复现、可验证。赞分享测试后端云原生容器编排可观测性【免费下载链接】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 浏览器镜像 Tag 命名与发布机制全解以 Chrome 111 Selenium Grid 4.34.0 发布记录为例docker selenium 浏览器镜像 Tag 命名与发布机制全解以 Chrome 111 Selenium Grid 4.34.0 发布记录为例 d测试后端云原生容器编排可观测性docker-selenium 浏览器镜像 Tag 命名全解以 Firefox 127.0.2 Selenium Grid 4.29.0 发布记录为例docker selenium 浏览器镜像 Tag 命名全解以 Firefox 127.0.2 Selenium Grid 4.29.0 发布记录为例 导测试后端云原生容器编排可观测性docker-selenium 浏览器镜像标签体系解析以 Selenium Grid 4.34.0 Chrome 95 发布记录为例docker selenium 浏览器镜像标签体系解析以 Selenium Grid 4.34.0 Chrome 95 发布记录为例 本篇技术指南围绕 d测试后端云原生容器编排可观测性上一篇SonarQube界面定制实战打造企业级代码质量管理平台下一篇POCO C库构建网络应用的完整开发框架指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进