在docker中模拟网络丢包需使用tc+netem,容器须加--cap-add=net_admin权限;进入容器安装iproute2后执行tc qdisc add/change/del命令设置丢包率,支持延迟+丢包复合策略;可通过dockerfile固化配置或用pumba工具对运行中容器一键注入丢包。

在 Docker 中模拟网络丢包,核心是利用 Linux 内核的 tc(traffic control) 工具配合 netem 模块,在容器网络接口上注入丢包策略。它不依赖外部代理或中间设备,直接作用于容器出口流量(如 eth0),精准、轻量、可复现。
必须加 --cap-add=NET_ADMIN 权限
tc 命令操作网络队列需要内核能力(capability),默认容器无权执行。启动时务必添加:
docker run --cap-add=NET_ADMIN -it ubuntu:22.04- 若使用 docker-compose,写为:
cap_add: ["NET_ADMIN"] - 注意:不要用
--privileged,权限过大且不安全
进入容器后用 tc 设置丢包率
确保容器内已安装 iproute2(含 tc):
- Debian/Ubuntu:
apt-get update && apt-get install -y iproute2 - Alpine:
apk add iproute2
然后执行丢包命令(以 15% 丢包为例):
在 Linux 上通过 Docker 运行 OpenClaw,并使用 Tailscale 实现远程访问。⚠️ 涉及 sudo、Docker、Tailscale和凭证挂载——请先查阅安全章节...
-
tc qdisc add dev eth0 root netem loss 15%(首次添加规则) -
tc qdisc change dev eth0 root netem loss 15%(修改已有规则) -
tc qdisc del dev eth0 root(清除所有规则,恢复常速)
支持复合策略,例如同时加延迟和丢包:tc qdisc change dev eth0 root netem delay 200ms 30ms loss 8%
用 Dockerfile 固化丢包配置(适合 CI/批量测试)
把弱网行为打包进镜像,避免每次手动配置:
- Dockerfile 中安装工具并设置入口命令:
RUN apt-get update && apt-get install -y iproute2
ENTRYPOINT ["sh", "-c", "tc qdisc add dev eth0 root netem loss 10%; exec \"$@\"", "_"]
- 构建运行:
docker build -t loss10-ubuntu . && docker run --cap-add=NET_ADMIN loss10-ubuntu curl http://example.com
用 Pumba 工具一键对运行中容器注入丢包
适合不想改镜像、临时干扰测试场景。Pumba 是专为容器混沌工程设计的 CLI 工具,底层仍调用 tc:
- 安装后运行:
pumba netem --duration 60s loss --percent 20% container_name - 支持正则匹配多个容器:
pumba netem loss --percent 5% re:^api- - 支持丢包模型(如 random、state、gemodel),比基础 loss 更贴近真实无线网络










