BusyBox 中文文档 下载 App

BusyBox Docker 官方镜像 不到 1MB 的容器基础

为什么 BusyBox 适合 Docker

容器生态里,基础镜像越小越好:镜像拉取速度更快、存储占用更少、攻击面更窄。官方 busybox 镜像的大部分标签都不到 900KB,比 Alpine Linux(约 5MB)还小一个数量级,是目前公开的最小可用容器基础镜像之一。

BusyBox Docker 镜像的核心就是一个静态编译的 BusyBox 二进制,加上容器运行时需要的最小文件结构(/etc、/proc、/sys 的挂载点)。没有 libc 依赖、没有包管理器、没有启动脚本——干净到极致。

基础用法

# 启动一个 BusyBox 容器的 shell
docker run --rm -it busybox sh

# 直接执行单条命令(用完即删)
docker run --rm busybox echo "hello from busybox"

# 测试网络连通性
docker run --rm busybox ping -c 3 google.com

# 作为临时文件浏览器
docker run --rm -it -v /host/path:/data busybox sh

BusyBox 容器默认没有启动任何服务,它的 CMD 就是 ["sh"]。如果你需要在容器里跑个脚本,可以直接覆盖:

docker run --rm busybox sh -c 'ls -la / && cat /etc/hostname'

构建极简应用镜像

BusyBox 最典型的用途是作为纯静态编译应用的最小基底:

# 构建阶段
FROM golang:alpine AS builder
WORKDIR /app
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -o myapp .

# 运行阶段——只有 BusyBox + 你的二进制
FROM busybox:latest
COPY --from=builder /app/myapp /usr/local/bin/myapp
CMD ["myapp"]

这样构建出来的最终镜像只有 BusyBox 体积(~900KB)+ 你的应用体积。如果应用本身也是静态编译,整个镜像可能不到 2MB。这比基于 Debian 或 Ubuntu 的镜像小了两个数量级。

常见场景

调试其他容器:当你在调试一个极简容器(scratch 或 distroless)时,里面没有任何 shell 和工具。可以用 BusyBox 作为 sidecar 进入同一网络命名空间或挂载卷来排查:

# 在同一个网络里启动 BusyBox 来 ping 另一个容器
docker run --rm -it --network container:target busybox ping target

临时 HTTP 服务:BusyBox 内置 httpd,可以快速起一个静态文件服务器:

docker run --rm -it -p 8080:80 -v ./static:/www busybox httpd -f -p 80

网络诊断:需要测试 TCP 端口连通性时,BusyBox 的 nc 命令最方便:

docker run --rm busybox nc -zv host 443

局限性

BusyBox Docker 镜像的极简也是它的局限:

如果你的容器需要这些功能,Alpine Linux(基础镜像约 5MB,基于 musl + BusyBox + apk)是更好的选择。BusyBox 适合真的"极简到极致"的场景。