- 测试
- 后端
- 云原生
- 容器编排
- 可观测性
【免费下载链接】docker-selenium
Provides a simple way to run Selenium Grid with Chrome, Firefox, and Edge using Container Platform, making it easier to perform browser automation at scale
导读
本文围绕 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-20250727 - Firefox 版本:
114.0.2(短版本114.0) - GeckoDriver 版本:
0.36.0(短版本0.36)
这四个版本号构成了后续所有镜像 Tag 的命名原料。该脚本位于仓库根目录 tag_and_push_browser_images.sh,是浏览器镜像发布打标的统一入口。
二、命令参数逐项解读
发布命令共携带 7 个参数,与脚本头部的参数解析一一对应(tag_and_push_browser_images.sh):
| 位置 | 本记录中的值 | 参数名 | 含义 |
|---|---|---|---|
$1 | 4.34.0 | VERSION | Selenium Grid 版本号 |
$2 | 20250727 | BUILD_DATE | 构建日期,TAG_VERSION=${VERSION}-${BUILD_DATE}拼接成4.34.0-20250727 |
$3 | selenium | NAMESPACE | 镜像命名空间(仓库名),最终镜像名为selenium/node-firefox等 |
$4 | false | PUSH_IMAGE | 是否执行docker push,false表示本次只打标不推送 |
$5 | firefox | BROWSER | 浏览器类型,脚本内通过case分支分发处理逻辑 |
$6 | true | RELEASE_OLD_VERSION | 是否为旧版本补发 Tag。true时只打基础 6 种 Tag,false时追加 4 种"裸版本" Tag |
$7 | 未传 | PLATFORM | 目标平台,默认linux/amd64 |
值得注意:第 6 个参数true直接决定了本次输出只有 6 种 Tag 模式。查看脚本 firefox 分支可知,FIREFOX_TAGS数组的基础成员固定为 6 个,而当RELEASE_OLD_VERSION=false时会再追加 4 个成员(见下文第四节),这也是归档版本只打精简 Tag 的设计考量。
三、本次发布生成的 12 个镜像 Tag 全清单
以node-firefox与standalone-firefox两个镜像为准,本次共生成 12 个 Tag,可归纳为 6 组一一对应的模式:
| 序号 | Tag(node-firefox / standalone-firefox 各一份) | 命名模式 |
|---|---|---|
| 1 | 114.0.2-geckodriver-0.36.0-grid-4.34.0-20250727 | 完整版本 + 驱动完整版本 + Grid 完整版本 |
| 2 | 114.0.2-geckodriver-0.36.0-20250727 | 完整版本 + 驱动完整版本 + 构建日期 |
| 3 | 114.0.2-20250727 | 浏览器完整版本 + 构建日期 |
| 4 | 114.0-geckodriver-0.36-grid-4.34.0-20250727 | 短版本 + 驱动短版本 + Grid 完整版本 |
| 5 | 114.0-geckodriver-0.36-20250727 | 短版本 + 驱动短版本 + 构建日期 |
| 6 | 114.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.sh):
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 'NR==1{print $2}')firefox --version输出形如Mozilla Firefox 114.0.2,取第 3 列得到114.0.2;geckodriver --version首行即为版本号,取NR==1的第 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.0,0.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 个 Tag(6 模式 × 2 镜像)的由来。
4.4 常规发布会额外追加 4 组 Tag
当RELEASE_OLD_VERSION=false(即常规版本发布)时,脚本追加以下 4 个成员(tag_and_push_browser_images.sh):
114.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/Dockerfile:
5.1 Firefox 本体安装策略
构建参数FIREFOX_VERSION=latest、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_VERSION=latest时动态解析上游最新发布,按架构选择linux64或linux-aarch64压缩包,解压到/opt/geckodriver-$GK_VERSION并软链到/usr/bin/geckodriver(NodeFirefox/Dockerfile)。
5.3 浏览器信息落盘
构建末尾将版本信息写入/opt/selenium/browsers/firefox/,供 Grid Node 注册时上报(NodeFirefox/Dockerfile):
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_NAME="selenium-node-firefox"与SE_NODE_ENABLE_MANAGED_DOWNLOADS="true"(NodeFirefox/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-size="2g" selenium/standalone-firefox:4.48.0-20260905其中--shm-size="2g"是 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_HOST=selenium-hub在多浏览器 Node 上,可通过环境变量SE_NODE_ENABLE_BROWSER_FIREFOX=false按需关闭 Firefox 能力(README 多架构矩阵一节 README.md)。
6.3 设置浏览器语言与区域
Firefox 的语言/区域需同时设置 profile 偏好并安装语言包 add-on(README.md):
profile = 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(options=options, command_executor="http://selenium-hub:4444/wd/hub") webdriver.Firefox.install_addon(driver, "/local/path/to/vi.xpi")语言包可借助 NodeFirefox/get_lang_package.sh 批量获取(README.md):
FIREFOX_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 注册到 supervisord(priority=20,由SE_ENABLE_BROWSER_LEFTOVERS_CLEANUP控制启停)。
相关环境变量及默认值记录在 ENV_VARIABLES.md:
| 环境变量 | 默认值 | 说明 |
|---|---|---|
SE_BROWSER_LEFTOVERS_PROCESSES_SECS | 7200 | 超过该存活秒数的 Firefox 进程将被清理 |
SE_BROWSER_LEFTOVERS_INTERVAL_SECS | 3600 | 清理守护进程的检查间隔 |
SE_BROWSER_LEFTOVERS_TEMPFILES_DAYS | 1 | /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-selenium
Provides a simple way to run Selenium Grid with Chrome, Firefox, and Edge using Container Platform, making it easier to perform browser automation at scale
相关推荐
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
测试后端云原生容器编排可观测性
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考