把容器镜像里的 1400 个 CVE 漏洞给干掉后 NanoClaw
一个镜像里塞 1400 个 CVE 漏洞,这在很多公司可能被认为是“正常”的,但对于追求极致精简的 NanoClaw 来说简直是噩梦。很多时候我们部署镜像,随手拉个 Ubuntu 或 Debian 的基础镜像,结果扫描一遍漏洞列表长得能把屏幕撑爆,大部分其实是那些根本用不到的系统库和冗余组件在作祟。
这次彻底清理的逻辑很简单:能删的全部删掉,必须留的用最轻量化的替代品。最核心的实操就是从传统的厚镜像迁移到 Distroless 或者基于 Alpine 的极简构建,直接把 shell、包管理器这些在生产环境其实不需要的东西给剔除掉。
具体的优化工作流大概是这样的:
一、分析依赖链
先用 dive 之类的工具看看到底是谁引入了这么多漏洞,发现 80% 的 CVE 集中在基础镜像的旧版库文件里。
二、切换基础镜像
放弃臃肿的官方镜像,改用 Google 的 Distroless 镜像。这种镜像里只有你的应用及其运行依赖,连 ls 和 cd 都没有,漏洞攻击面直接缩减了几个数量级。
三、多阶段构建优化
在 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 就能解决绝大部分问题。
事件追踪 · 相关报道
Anthropic 的编程工具被指有安全后门,这事儿得怎么看
1天前
我把服务挂了快五个小时,结果一个请求都没接住
2天前
自己搭建 Pacific Slate 这种多智能体助手比买个专用小主
3天前
想让大模型在安全环境下跑代码,目前的沙箱方案其实都挺笨重的
4天前