代码背后的故事:docker容器名生成算法

news/2025/11/16 20:01:38/文章来源:https://www.cnblogs.com/shawyeok/p/19228831

我们知道容器化最大的好处是软件交付形成了一种标准化,其带来的好处是巨大且深远的,让开发者从解决各种环境差异的痛苦中解放出来,同时大幅简化了部署流程和管理成本。

Pasted image 20251107133021

当我们用docker run运行一个容器时,如果没有指定一个名字,docker将会为给我们自动生成一个名字,通过docker ps可以查看正在运行的容器,例如下面图中的exciting_gates, sad_babbage, reverent_albattani

Pasted image 20251107133939

作为开发者的你有没有好奇过这个名字到底是什么意思?它的生成机制是什么?如果你和我一样也对此好奇,终于在某一天忍不住要去了解一下背后的原理。那么恭喜你,现在有了AI加持,你需要做的只是具有针对性地提问就行。

利用deepwiki工具借助LLM可以帮助你快速从一个大型代码仓库中找到你想要关注的代码实现细节,当然把代码克隆到本地,用Cursor Ask模式也可以帮助我们理解指定的代码仓。

Pasted image 20251115120554

https://deepwiki.com/search/how-docker-generate-the-name-i_4d18ce9d-57b5-49fb-83eb-638162b07d07

可以看到容器名的生成算法实现在了pkg/namesgenerator/names-generator.go文件内,它对外提供了一个函数GetRandomName:

Pasted image 20251115121504

函数非常简单,最重要的部分就是从两个数组字典(形容词数组和人名的姓surname数组)各随机取一个,构成adjective_surname这种格式。值得一提的是函数中有一个硬编码,当匹配到boring_wozniak时直接跳过重新选择,看来当初写这段代码的程序员一定是Steve Woziak(苹果公司创始人之一)的粉丝。例如文章开头截图中的exciting_gatessad_babbage就是这样生成的。

我们看看上面两个数组中分别都有些什么:

左边的形容词数组:

	left = [...]string{"admiring","adoring","affectionate","agitated","amazing",..."wonderful","xenodochial","youthful","zealous","zen",}

几乎都是比较正面、积极的形容词,有好些词汇比较生僻笔者从没使用过(逃)。

右边的人名surname数组:

	right = [...]string{// Maria Gaetana Agnesi - Italian mathematician, philosopher, theologian and humanitarian. She was the first woman to write a mathematics handbook and the first woman appointed as a Mathematics Professor at a University. https://en.wikipedia.org/wiki/Maria_Gaetana_Agnesi"agnesi",// Muhammad ibn Jābir al-Ḥarrānī al-Battānī was a founding father of astronomy. https://en.wikipedia.org/wiki/Mu%E1%B8%A5ammad_ibn_J%C4%81bir_al-%E1%B8%A4arr%C4%81n%C4%AB_al-Batt%C4%81n%C4%AB"albattani",// Frances E. Allen, became the first female IBM Fellow in 1989. In 2006, she became the first female recipient of the ACM's Turing Award. https://en.wikipedia.org/wiki/Frances_E._Allen"allen",// June Almeida - Scottish virologist who took the first pictures of the rubella virus - https://en.wikipedia.org/wiki/June_Almeida"almeida",...// The Wright brothers, Orville and Wilbur - credited with inventing and building the world's first successful airplane and making the first controlled, powered and sustained heavier-than-air human flight - https://en.wikipedia.org/wiki/Wright_brothers"wright",// Chien-Shiung Wu - Chinese-American experimental physicist who made significant contributions to nuclear physics. https://en.wikipedia.org/wiki/Chien-Shiung_Wu"wu",// Rosalyn Sussman Yalow - Rosalyn Sussman Yalow was an American medical physicist, and a co-winner of the 1977 Nobel Prize in Physiology or Medicine for development of the radioimmunoassay technique. https://en.wikipedia.org/wiki/Rosalyn_Sussman_Yalow"yalow",// Ada Yonath - an Israeli crystallographer, the first woman from the Middle East to win a Nobel prize in the sciences. https://en.wikipedia.org/wiki/Ada_Yonath"yonath",// Nikolay Yegorovich Zhukovsky (Russian: Никола́й Его́рович Жуко́вский, January 17 1847 – March 17, 1921) was a Russian scientist, mathematician and engineer, and a founding father of modern aero- and hydrodynamics. Whereas contemporary scientists scoffed at the idea of human flight, Zhukovsky was the first to undertake the study of airflow. He is often called the Father of Russian Aviation. https://en.wikipedia.org/wiki/Nikolay_Yegorovich_Zhukovsky"zhukovsky",}

人名数组中基本上都是一些比较知名的科学家例如欧拉、爱因斯坦、费曼和图灵等,除了科学家之外还有工程师例如UNIX和C语言之父Ken Thompson、发明Linux和Git的Linus Torvalds和摩尔定律的提出者Moore等。限于篇幅原因,不能在文中一一列出,感兴趣的可以直接去查看源文件。

这个名单中的中国人有两个:屠呦呦和吴健雄。

没想到看起来普通的一个容器名生成算法,翻一番它的变更历史,可以看到很多代码之外的故事。

值得一提的是这个文件中的列表已经在2022年被Moby项目的维护人员标记为冻结不再接受新的名单变更了,主要原因是后面的维护负担越来越大,这里主要体现在两个方面一是adjective_surname这种形式有的时候会引入一些尴尬的组合,其次是名单中的人物会变得有争议不再适合放在名单中了,例如有两位牵扯到爱泼斯坦案件的。

另外,在 docker 0.7.x 之前,容器名的生成算法生成的还是颜色和动物组成color_animal这种组合(例如 red_panda),后来才改成了 adjective_surname,向那些顶尖科学家和工程师们致敬。

看到这里,当下一次你再docker run起来一个容器时,会不会好奇这个容器名又是在向谁致敬呢?
另外,在 Docker 0.7.x 之前,容器名的生成方式其实是 color_animal(例如 red_panda),后来才改成了 adjective_surname,向那些顶尖科学家和工程师们致敬。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/967310.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在Windows系统置顶窗口不被Win+D快捷键影响

需求背景 Windows10系统,工作需要开多个应用程序,在使用双屏幕时(多显示器设置为:扩展这些显示器),希望使用另外一个屏幕做监控用,总时只要打开一个浏览器窗口盯着监控信息。但是经常需要通过快捷键Win+D快速返…

dns服务详解

dns服务 1、dns服务是什么叫做名称服务,作用就是将域名解析成ip地址,这个叫做正向解析将ip地址解析成域名叫做反向解析还提供邮件服务器的交换记录在互联网中有很重要的作用是一个c/s架构,每一个电脑就是一个dns客户…

一乐人物志

LEWISAK,真名 Woiler,CSP-S 2025 rk721,尽管进了高新一中博雅班,但是在二班和一四班的学生拉开了一年的 whk 差距,回家后每天推旮旯隔膜,被骂是虾头油渍处,ZR 模拟赛送了 1500 分后 rating 1479。初二时染上了不…

详细介绍:基于Spring Boot的高校实习实践管理系统(源码+论文+部署+安装)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

点分树

事实上比较朴素。 P6329 【模板】点分树 | 震波 大致思路是将点分治的那个过程建成一棵树。每一层的重心和下一层的中心连边。 这棵树有两个重要性质:树高保证为 \(\log n\),任意两点的 lca 一定在这两个点的路径上。…

HTTP请求走私漏洞介绍 - 实践

HTTP请求走私漏洞介绍 - 实践2025-11-16 19:46 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important…

20232428 2025-2026-1 《网络与系统攻防技术》实验五实验报告

1.实验内容 (1)从www.besti.edu.cn、baidu.com、sina.com.cn中选择一个DNS域名进行查询,获取信息 (2)尝试获取BBS、论坛、QQ、MSN中某一好友的IP地址,并查询获取该好友所在的具体地理位置 (3)使用nmap开源软件…

xml.etree.ElementTree 完全支持嵌套查找子元素,且有多种简洁实用的方式。

xml.etree.ElementTree 完全支持嵌套查找子元素,且有多种简洁实用的方式。 核心实现方式 1. XPath 路径直接嵌套查找(最常用) 通过 / 分隔层级,直接定位深层子元素,支持精确匹配标签名、属性等。 import xml.etre…

深入解析:Spring MVC 拦截器interceptor

深入解析:Spring MVC 拦截器interceptorpre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "M…

HarmonyOS 5 鸿蒙Context上下文机制与资源管理详解 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

《重生之我成为世界顶级黑客》第八章:未来野望

《重生之我成为世界顶级黑客》第八章:未来野望词穷,暂时没灵感了。龙傲天盯着桌上那个用40积分换来的企鹅玩偶,嘴角泛起一丝苦涩的笑意。这次的经历像一盆冷水,浇醒了他这些天因微小进步而产生的自满。企业的安全防…

打开工作空间时,但未在 DTD/架构中声明

OpenFromFile时,如果路径不存在或者不合法, 将报错,请先检查路径! {"未指定的错误\r\n\r\n使用了元素 {http://schemas.microsoft.com/windows/2005/02/color/WcsCommonProfileTypes}Text,但未在 DTD/架构中…

开源软件的崛起:技术共享与协作创新的新时代 - 详解

开源软件的崛起:技术共享与协作创新的新时代 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&quo…

从 LLM 到 Agentic AI:构建下一代智能平台的全栈路径

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

11.16组会

R语言 应用:统计分析、绘图功能、扩展生态 列表、数组、矩阵、数据框 平均值、最大最小、中位数等 作各种图,质量好

20232418 2025-2026-1 《网络与系统攻防技术》实验五实验报告

20232418 2025-2026-1 《网络与系统攻防技术》实验五实验报告 1.实验内容 1.1通过whois、dig、nslookup等命令查询DNS域名、IP地址的详细信息。 1.2通过资源监视器和在线工具得到IP地址并确定其地理位置。 1.3nmap开源…

Claude Code教程:从零构建AutoPost GPT自动内容生成系统

Claude Code教程:从零构建AutoPost GPT自动内容生成系统AutoPost GPT是一个非常适合Claude Code 的全流程实战项目,它涵盖了从架构设计到模块拆分、从 API 调用到任务调度、从内容生成到自动发布的完整工程链路。如果…

MFC + OpenCV 图像预览显示不全中断问题解除:GDI行填充详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

python多进程 —— multiprocessing.Manager —— 跨主机共享内存的读写

python多进程 —— multiprocessing.Manager —— 跨主机共享内存的读写python多进程 —— multiprocessing.Manager —— 跨主机共享内存的读写示例代码:点击查看代码 import multiprocessingdef f(ns):ns.x.append(…

AT_agc063_e Child to Parent 题解

AT_agc063_e Child to Parent 题解 设 \(c_x\) 表示点 \(x\) 一共执行的操作次数,对于不同的 \(c_x\) 序列最终的 \(A\) 序列是不同的,因此我们对 \(c_x\) 序列计数即可。 容易发现一个 \(c_x\) 合法的充要是 \(0\le…