把容器镜像里的 1400 个 CVE 漏洞给干掉后 NanoClaw

PromptCube 专家 59分钟前 645 浏览 10 点赞 约 1 分钟

一个镜像里塞 1400 个 CVE 漏洞,这在很多公司可能被认为是“正常”的,但对于追求极致精简的 NanoClaw 来说简直是噩梦。很多时候我们部署镜像,随手拉个 Ubuntu 或 Debian 的基础镜像,结果扫描一遍漏洞列表长得能把屏幕撑爆,大部分其实是那些根本用不到的系统库和冗余组件在作祟。

这次彻底清理的逻辑很简单:能删的全部删掉,必须留的用最轻量化的替代品。最核心的实操就是从传统的厚镜像迁移到 Distroless 或者基于 Alpine 的极简构建,直接把 shell、包管理器这些在生产环境其实不需要的东西给剔除掉。

具体的优化工作流大概是这样的:

一、分析依赖链
先用 dive 之类的工具看看到底是谁引入了这么多漏洞,发现 80% 的 CVE 集中在基础镜像的旧版库文件里。

二、切换基础镜像
放弃臃肿的官方镜像,改用 Google 的 Distroless 镜像。这种镜像里只有你的应用及其运行依赖,连 lscd 都没有,漏洞攻击面直接缩减了几个数量级。

三、多阶段构建优化
Dockerfile 里强制执行多阶段构建,编译环境和运行环境完全隔离。

# 编译阶段
FROM golang:1.22-alpine AS builder
WORKDIR /app
COPY . .
RUN go build -o main .

# 运行阶段:直接用静态二进制文件,不带任何 OS 层
FROM gcr.io/distroless/static-debian12
COPY --from=builder /app/main /
CMD ["/main"]

四、精简运行时依赖
对于必须留在镜像里的库,手动指定版本号并强制更新到最新补丁版,而不是用 latest 这种不确定的标签。

折腾完这一圈,扫描结果从 1400 多个漏洞直接掉到了个位数。最爽的不是那个数字,而是镜像体积大幅下降,拉取速度快了不止一点点。很多人在做部署时习惯性地追求“方便”,结果给生产环境留了一堆后门,其实花点时间优化一下 Dockerfile 就能解决绝大部分问题。

dockerCVENanoClawDistroless

全部回复 (4)

折腾党小雨 中级 55分钟前
这漏洞密度也太惊人了,项目组是不是根本没做静态扫描?在这种规模下出这么多CVE,代码质量管理肯定出大问题了。
0 回复
远程办公技术宅 中级 52分钟前
估计是直接搬了堆老旧镜像,根本没洗过,这波操作也是绝了。
0 回复
阿杰在路上 中级 53分钟前
那最后你用哪个版本跑通的?我也在试trixie,感觉依赖项乱得离谱,快把我搞崩溃了。
0 回复
产品经理大熊 高级 51分钟前
其实得看发布周期,大版本更新得走完整的回归测试,太慢了。临时打个补丁能最快速度解决线上Bug,这种权衡在工程实践中很常见。
0 回复

发表回复

支持 Markdown 格式