在 Docker 容器里测试外部域名延迟

前言:为什么要在 Docker 容器里测延迟?

在本地电脑测延迟很容易,但有时候我们需要在生产环境的容器环境里测试,比如:

  • 验证容器网络是否正常
  • 测试不同镜像的网络表现
  • 模拟生产环境做延迟监控
  • 开发网络相关工具

然而,大多数开发环境用的 Docker 基础镜像(尤其是 Alpine、slim 版本)都非常精简,连 curlping 都没有,这就很头疼了,而且说不好会影响正式环境生产。


进入开发环境容器测试

进入容器后,直接碰到:

sh: 1: curl: not found
E: Unable to locate package iputils-ping
E: Unable to locate package curl

这是因为容器是极简系统,没有预装常用工具,也可能用了错误的包管理器。


正确解决方案(推荐使用 Alpine 镜像)

Alpine 是最适合做这种测试的轻量镜像,体积小、速度快。

第一步:启动一个干净的测试容器

在宿主机执行下面命令:

docker run -it --rm --name delay-test alpine:latest sh

第二步:安装必要工具

进入容器后,一条命令搞定所有工具:

# 安装网络测试工具 + 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)

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 测试

ping -c 4 www.google.com

3. 批量测试多个域名

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 是否可用

python --version
pip --version

成功后,就可以在容器里写 Python 脚本做更复杂的延迟监控了。


一键启动完整环境(最方便)

如果你不想一步步操作,可以直接在宿主机运行这条命令:

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) 已就绪"
'

提示

  • Alpineapk 安装包,Ubuntu/Debianapt-get
  • 容器默认使用 bridge 网络模式,测试结果已经比较接近真实环境。
  • 如果 ping 不通(很多云厂商禁用 ICMP),优先使用 curl 测试。
  • 想长期使用?可以基于 Alpine 自己写一个 Dockerfile,方便下次直接使用。
posted @ 2026-05-14 09:31  牛奔  阅读(23)  评论(0)    收藏  举报