前言:为什么要在 Docker 容器里测延迟?
在本地电脑测延迟很容易,但有时候我们需要在生产环境的容器环境里测试,比如:
- 验证容器网络是否正常
- 测试不同镜像的网络表现
- 模拟生产环境做延迟监控
- 开发网络相关工具
然而,大多数开发环境用的 Docker 基础镜像(尤其是 Alpine、slim 版本)都非常精简,连 curl 和 ping 都没有,这就很头疼了,而且说不好会影响正式环境生产。
进入开发环境容器测试
进入容器后,直接碰到:
bash
sh: 1: curl: not found
E: Unable to locate package iputils-ping
E: Unable to locate package curl
这是因为容器是极简系统,没有预装常用工具,也可能用了错误的包管理器。
正确解决方案(推荐使用 Alpine 镜像)
Alpine 是最适合做这种测试的轻量镜像,体积小、速度快。
第一步:启动一个干净的测试容器
在宿主机执行下面命令:
bash
docker run -it --rm --name delay-test alpine:latest sh
第二步:安装必要工具
进入容器后,一条命令搞定所有工具:
bash
# 安装网络测试工具 + Python
apk add --no-cache curl bind-tools iputils-ping python3 py3-pip
# 创建软链接,方便使用 python 和 pip 命令
ln -sf /usr/bin/python3 /usr/bin/python
ln -sf /usr/bin/pip3 /usr/bin/pip
第三步:开始测试域名延迟
1. 最推荐的 curl 综合测试(能看到完整延迟 breakdown)
bash
curl -w "
域名: %{url_effective}
DNS解析时间: %{time_namelookup}s
TCP连接时间: %{time_connect}s
SSL握手时间: %{time_appconnect}s
首字节时间(TTFB): %{time_starttransfer}s
总耗时: %{time_total}s
" -o /dev/null -s https://www.google.com
2. 传统 ping 测试
bash
ping -c 4 www.google.com
3. 批量测试多个域名
bash
for domain in www.google.com baidu.com taobao.com cloudflare.com; do
echo "========== 测试 $domain =========="
curl -w "DNS: %{time_namelookup}s | 总时间: %{time_total}s\n" -o /dev/null -s https://$domain
done
第四步:验证 Python 是否可用
bash
python --version
pip --version
成功后,就可以在容器里写 Python 脚本做更复杂的延迟监控了。
一键启动完整环境(最方便)
如果你不想一步步操作,可以直接在宿主机运行这条命令:
bash
docker run -it --rm alpine:latest sh -c '
apk add --no-cache curl bind-tools iputils-ping python3 py3-pip &&
ln -sf /usr/bin/python3 /usr/bin/python &&
echo "✅ 环境准备完成!Python $(python --version) 已就绪"
'
提示
- Alpine 用
apk安装包,Ubuntu/Debian 用apt-get。 - 容器默认使用 bridge 网络模式,测试结果已经比较接近真实环境。
- 如果 ping 不通(很多云厂商禁用 ICMP),优先使用
curl测试。 - 想长期使用?可以基于 Alpine 自己写一个 Dockerfile,方便下次直接使用。