ARTICLE DETAIL

资讯详情

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

docker-selenium 镜像标签发布机制详解:以 Selenium Grid 4.32.0 与 Chrome 100 的归档发布记录为例

docker-selenium 镜像标签发布机制详解:以 Selenium Grid 4.32.0 与 Chrome 100 的归档发布记录为例 测试后端云原生容器编排可观测性【免费下载链接】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点击查看免费下载本文以仓库归档的发布记录 chrome_100.md 为主线结合其背后真正执行的发布脚本 tag_and_push_browser_images.sh 源码完整拆解 docker-selenium 项目为某个浏览器版本构建并打标签镜像的全过程。读完本文你将理解node-chrome/standalone-chrome镜像的标签命名规则、版本探测与打标机制并能根据测试需求精确选择或自行复现一条浏览器版本发布记录。一、先读懂这条发布记录本身CHANGELOG/archived/4.32.0/chrome_100.md是 Selenium Grid 4.32.0 发布周期内为 Chrome 100 这一浏览器版本生成并打标签镜像时的真实命令与输出。它虽然只有一段命令和 12 行Tagged输出但信息密度极高是理解 docker-selenium 镜像标签体系的绝佳入口。原记录全文如下这是本次发布操作的可追溯证据一字不落地保留./tag_and_push_browser_images.sh 4.32.0 20250505 selenium false chrome true Tagging images for browser chrome, version 4.32.0, build date 20250505, namespace selenium Selenium Grid version - 4.32.0-20250505 Chrome version - 100.0.4896.127 Short Chrome version - 100.0 ChromeDriver version - 100.0.4896.60 Short ChromeDriver version - 100.0 Tagged selenium/node-chrome:100.0.4896.127-chromedriver-100.0.4896.60-grid-4.32.0-20250505 Tagged selenium/standalone-chrome:100.0.4896.127-chromedriver-100.0.4896.60-grid-4.32.0-20250505 Tagged selenium/node-chrome:100.0.4896.127-chromedriver-100.0.4896.60-20250505 Tagged selenium/standalone-chrome:100.0.4896.127-chromedriver-100.0.4896.60-20250505 Tagged selenium/node-chrome:100.0.4896.127-20250505 Tagged selenium/standalone-chrome:100.0.4896.127-20250505 Tagged selenium/node-chrome:100.0-chromedriver-100.0-grid-4.32.0-20250505 Tagged selenium/standalone-chrome:100.0-chromedriver-100.0-grid-4.32.0-20250505 Tagged selenium/node-chrome:100.0-chromedriver-100.0-20250505 Tagged selenium/standalone-chrome:100.0-chromedriver-100.0-20250505 Tagged selenium/node-chrome:100.0-20250505 Tagged selenium/standalone-chrome:100.0-20250505这份输出可以拆成三层信息命令层发布者执行了./tag_and_push_browser_images.sh 4.32.0 20250505 selenium false chrome true把 Selenium Grid 版本、构建日期、命名空间、是否推送、浏览器类型、是否旧版本发布一次性传给了脚本。探测层脚本进入已构建的node-chrome:4.32.0-20250505镜像读出 Chrome 版本100.0.4896.127、ChromeDriver 版本100.0.4896.60并各自计算短版本100.0。打标层依据版本信息生成 6 组标签分别打到selenium/node-chrome和selenium/standalone-chrome两个镜像上共 12 个 Tag。二、命令参数逐项拆解脚本的 7 个入参打开 tag_and_push_browser_images.sh可以看到参数解析逻辑VERSION$1 BUILD_DATE$2 NAMESPACE$3 PUSH_IMAGE${4:-false} BROWSER$5 RELEASE_OLD_VERSION${6:-false} PLATFORM${7:-linux/amd64}对照本次发布记录的命令各参数含义如下参数位变量本次值含义默认值$1VERSION4.32.0Selenium Grid 版本号必填$2BUILD_DATE20250505构建/发布日期YYYYMMDD必填$3NAMESPACEselenium镜像命名空间Registry 前缀见下文说明$4PUSH_IMAGEfalse打标后是否执行docker push推送到远端false$5BROWSERchrome浏览器类型chrome/chromium/edge/firefox/chrome-for-testing必填$6RELEASE_OLD_VERSIONtrue是否为旧版本发布决定是否生成不带日期的标签false$7PLATFORM未传探测版本时运行镜像的平台linux/amd64几点值得注意的细节命名空间的实际取值脚本第 16 行有NAMESPACE${NAME:-selenium}也就是说最终使用的命名空间由环境变量NAME决定未设置时才回落到selenium。本次输出中的namespace selenium即默认值。PUSH_IMAGEfalse的含义本次发布记录只打标而未推送说明该轮发布先在本地产出所有标签推送环节由发布流水线后续步骤统一处理。RELEASE_OLD_VERSIONtrue的影响这是决定标签数量从 10 组减为 6 组的关键开关下文第五节详述。三、版本探测打标签前先进入镜像读取真实版本脚本没有猜版本号而是直接以--platform指定的平台运行刚构建好的镜像在容器内执行浏览器与驱动程序解析其版本输出。对应 chrome 分支CHROME_VERSION$(docker run --platform ${PLATFORM} --rm ${NAMESPACE}/node-chrome:${TAG_VERSION} google-chrome --version | awk {print $3}) CHROMEDRIVER_VERSION$(docker run --platform ${PLATFORM} --rm ${NAMESPACE}/node-chrome:${TAG_VERSION} chromedriver --version | awk {print $2})其中TAG_VERSION${VERSION}-${BUILD_DATE}即4.32.0-20250505。两条命令分别运行google-chrome --version输出形如Google Chrome 100.0.4896.127用awk {print $3}取出第三个字段得到100.0.4896.127运行chromedriver --version输出形如ChromeDriver 100.0.4896.60用awk {print $2}取出第二个字段得到100.0.4896.60。这种实测版本号的做法保证了标签与镜像内真实二进制一一对应不会出现标签写错导致拉下来的镜像版本不符的问题。镜像内之所以能直接执行这些命令是因为 NodeChrome/Dockerfile 在构建阶段就把install-chrome.sh等脚本复制进了/opt/bin并且构建时也会把浏览器版本写入/opt/selenium/browsers/chrome/version供 Grid 配置使用见 Dockerfile 相关行。四、短版本号short_version函数的截断规则探测到完整版本后脚本调用short_version生成主版本.次版本形式的短号对应 脚本第 53-57 行function short_version() { local __long_version$1 local __version_split(${__long_version//./ }) echo ${__version_split[0]}.${__version_split[1]} }逻辑非常直白以.分割完整版本号取前两段拼接。因此100.0.4896.127→100.0100.0.4896.60→100.0短版本标签的用途是给用户一个不关心补丁号的稳定入口只要浏览器主次版本一致就可以用短标签拉取而不必精确记忆补丁版本。发布记录中的两行输出印证了这一点Short Chrome version - 100.0 Short ChromeDriver version - 100.0五、标签矩阵6 组标签的命名设计完整的标签列表由 chrome 分支的 CHROME_TAGS 数组 定义。每一组标签依次代表一种信息粒度从最完整的浏览器版本 驱动版本 Grid 版本 日期到最精简的浏览器短版本 日期组标签模式本次生成的标签示例1Chrome-chromedriver-Driver-grid-Grid-Date100.0.4896.127-chromedriver-100.0.4896.60-grid-4.32.0-202505052Chrome-chromedriver-Driver-Date100.0.4896.127-chromedriver-100.0.4896.60-202505053Chrome-Date100.0.4896.127-202505054ShortChrome-chromedriver-ShortDriver-grid-Grid-Date100.0-chromedriver-100.0-grid-4.32.0-202505055ShortChrome-chromedriver-ShortDriver-Date100.0-chromedriver-100.0-202505056ShortChrome-Date100.0-20250505每组标签都会通过retag同时作用于node-chrome与standalone-chrome两个镜像第 101-104 行因此最终输出 12 行Tagged。RELEASE_OLD_VERSION为什么本次只有 6 组当RELEASE_OLD_VERSION为false即发布当前活跃的新版本时脚本会额外追加 4 组不带日期的标签第 88-99 行Chrome-chromedriver-DriverChromeShortChrome-chromedriver-ShortDriverShortChrome不带日期意味着最新发布即覆盖适合当前版本线而 Chrome 100 属于历史版本线的补发归档因此命令第 6 个参数传了true只生成带日期20250505的 6 组标签避免历史版本的无日期标签意外覆盖或污染当前活跃版本线。这正是发布记录中只出现 12 行Tagged的原因——与源码逻辑完全吻合可以交叉验证。六、retag 函数本地打标与 Registry 推送retag是执行打标的底层函数见 脚本第 31-51 行。常规路径是docker tag ${__source} ${NAMESPACE}/${__image}:${__tag} echo Tagged ${NAMESPACE}/${__image}:${__tag} if [ ${PUSH_IMAGE} true ]; then docker push ${NAMESPACE}/${__image}:${__tag} fi其中__source是${NAMESPACE}/${__image}:${TAG_VERSION}即以4.32.0-20250505为基准镜像派生出一系列别名标签。本次记录中PUSH_IMAGEfalse因此只输出Tagged ...而不执行推送。函数注释中还揭示了发布流水线的一个进阶机制当环境变量PROMOTE_TAGStrue时由deploy.yml在发布复用已测试镜像而非重新构建时设置retag不再走本地docker tag而是改用docker buildx imagetools create在 Registry 与 Registry 之间直接复制多架构 manifest若同时设置了PROMOTE_GHCR_NAMESPACE还会在同一次调用中把标签镜像同步到 GHCR 命名空间第 36-44 行。这是从源码结构可以推断出的发布优化避免docker pull只带回单架构镜像、从而丢失多架构标签信息的问题。七、两种镜像形态node-chrome 与 standalone-chrome发布记录把每组标签都同时打到了node-chrome和standalone-chrome对应 docker-selenium 的两种运行形态selenium/node-chromeSelenium Grid 的 Node 角色只承担浏览器执行需要配合 Hub或 Grid 集群中的 Router、Distributor 等组件使用可横向扩展。其镜像构建逻辑见 NodeChrome/Dockerfile默认安装google-chrome-stable并通过install-chromedriver.sh安装匹配的 ChromeDriver。selenium/standalone-chrome把整个 GridStandalone 模式与 Chrome 打包在一个容器里一条命令即可获得完整的可测 Grid 端点。构建逻辑见 Standalone/Dockerfile并通过SE_*环境变量暴露会话超时、健康检查间隔等运行时参数。两种形态共享同一套版本与标签体系这也是为什么发布记录中每个标签都成对出现。日常使用规范可参考 node-chrome 镜像文档 与 standalone-chrome 镜像文档。八、按标签拉取运行从归档记录到实际使用理解了标签矩阵就能按需拉取。以本次发布为例最完整的标签对应 HubNode 架构# 1. 创建网络 docker network create grid # 2. 启动 Hub docker run -d -p 4442-4444:4442-4444 --net grid --name selenium-hub selenium/hub:4.32.0-20250505 # 3. 启动 Chrome 100 节点浏览器镜像务必加大共享内存 docker run -d --net grid -e SE_EVENT_BUS_HOSTselenium-hub \ --shm-size2g \ selenium/node-chrome:100.0.4896.127-chromedriver-100.0.4896.60-grid-4.32.0-20250505如果只想快速跑一个独立的 Grid直接使用 standalone 形态docker run -d -p 4444:4444 -p 7900:7900 --shm-size2g \ selenium/standalone-chrome:100.0-20250505两条命令都遵循 镜像文档 中的约定包含浏览器的镜像运行时建议使用--shm-size2glatest只适合快速体验生产与回归测试应使用浏览器版本 驱动版本 Grid 版本 日期的完整标签做精确固定。九、版本矩阵背后的动机为什么要把旧 Chrome与新 Grid打包这份归档记录之所以存在是因为 docker-selenium 刻意维护了一张Grid 版本 × 浏览器版本的矩阵。其动机在 CHANGELOG/README.md 中有明确说明在提供最新 Selenium Grid 核心功能的同时让用户仍能进行跨浏览器测试或在特定浏览器版本存在兼容性问题、官方支持受限时固定pin浏览器版本。项目为 Node 与 Standalone 提供同时打包了 Grid 与特定驱动/浏览器版本的镜像用户只需找到对应的镜像标签并拉取即可开始测试。也就是说4.32.0 这一 Grid 版本线同时归档了 Chrome 95 至 134 的发布记录对应 矩阵表格chrome_100.md只是其中一行。README 也坦诚地给出了边界项目并未对所有 Grid 与浏览器组合做完整测试用户需根据自身测试需求自行评估——这也解释了为什么版本锁定类标签带完整日期才是官方推荐的可复现选择。十、小结从一条发布记录读懂镜像运维的完整闭环回看chrome_100.md它表面上只是 12 行Tagged输出但在源码的支撑下可以还原出一条完整的镜像发布闭环构建先构建出基准镜像selenium/node-chrome:4.32.0-20250505Chrome 与 ChromeDriver 的安装见 NodeChrome/Dockerfile实测docker run进入镜像读取真实的 Chrome / ChromeDriver 版本并截取短版本衍生按版本 × 驱动 × Grid × 日期的粒度矩阵生成 6 组新版本发布时为 10 组标签同步每组标签同时作用于 Node 与 Standalone 两种形态按需推送 Registry归档将命令与输出落盘为CHANGELOG/archived/version/browser_major.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点击查看免费下载相关推荐docker-selenium 浏览器镜像标签发布全解析以 Selenium Grid 4.32.0 Chrome 113 发布记录为例docker selenium 浏览器镜像标签发布全解析以 Selenium Grid 4.32.0 Chrome 113 发布记录为例 本篇指南以 CH测试后端云原生容器编排可观测性docker-selenium 浏览器镜像标签全解以 Chrome 104 与 Selenium Grid 4.32.0 的发布记录为例docker selenium 浏览器镜像标签全解以 Chrome 104 与 Selenium Grid 4.32.0 的发布记录为例 本篇指南以仓库 CH测试后端云原生容器编排可观测性docker-selenium 浏览器镜像多标签发布机制以 Selenium Grid 4.32.0 与 Chrome 105 为例docker selenium 浏览器镜像多标签发布机制以 Selenium Grid 4.32.0 与 Chrome 105 为例 本篇技术指南围绕 doc测试后端云原生容器编排可观测性上一篇什么是 Dashboard2026 年完整指南从类型、KPI 设计到用 Refine 快速搭建下一篇mongoose 跨项目共享 Schema 完整实践peerDependencies、导出 Schema 与 POJO 迁移方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表