
Traceroute Service 是一个基于 Elixir/OTP 构建的高性能分布式网络路径追踪服务,提供 HTTP REST API 和 NATS 消息两种接口,用于诊断网络路径。该服务利用 Elixir/OTP 的 supervision trees 实现高容错性,支持并发请求处理和超时管理,适合分布式系统中的网络诊断场景。
bash# 克隆仓库 git clone <repository-url> cd traceroute # 安装依赖 mix deps.get # 设置环境变量 source local-test.env # 如有可用环境配置文件 # 运行测试 mix test # 启动服务 mix run --no-halt
bash# 构建镜像 docker build -t traceroute:latest . # 推荐方式:使用 CAP_NET_RAW 权限(更安全) docker run --cap-add=NET_RAW -p 4100:4100 traceroute:latest # 替代方式:完全特权模式(安全性较低) docker run --privileged -p 4100:4100 traceroute:latest
安全说明:镜像默认以非 root 用户(appuser:1001)运行,仅通过 CAP_NET_RAW capability 获取 ICMP 操作所需权限,符合安全最佳实践。
| 环境变量 | 描述 | 默认值 |
|---|---|---|
NATS_HOST | NATS 服务器主机地址 | "nats" |
NATS_PORT | NATS 服务器端口 | 4222 |
HTTP_PORT | HTTP 服务端口 | 4100 |
MIX_ENV | 运行环境(dev/test/prod) | - |
服务通过以下配置连接 NATS 进行分布式消息处理:
elixir# 配置位于 lib/tracer.ex %{ host: System.get_env("NATS_HOST", "nats"), port: String.to_integer(System.get_env("NATS_PORT", "4222")) }
端点:POST /traceroute
请求示例:
bashcurl -X POST http://localhost:4100/traceroute \ -H "Content-Type: application/json" \ -d '{"host": "google.com"}'
响应示例:
json{ "status": 200, "body": { "result": "ok", "message": "Traceroute successful to google.com", "next_hop_ip": "172.217.14.46", "next_hop_hostname": "lga25s78-in-f14.1e100.net", "next_hop_fqdn": "lga25s78-in-f14.1e100.net" } }
主题:traceroute.request
消息格式:
json{ "body": "google.com", "reply_to": "response.topic" }
响应:与 HTTP API 响应结构类似,通过指定的 reply_to 主题返回
Tracer:主应用监督者Tracer.Worker:traceroute 执行逻辑Tracer.Web.Handler:HTTP 请求处理器NATS.Listener:NATS 消息处理器Tracer.Web.Supervisor:Web 服务器监督者Tracer.Web.Handler → Tracer.Worker → 响应NATS.Listener → Tracer.Worker → 回复Tracer.Worker)trace/1:执行 traceroute 的主函数clean_timeouts/1:过滤超时响应get_last_hop/1:提取有效跳数信息process_results/2:格式化响应数据bash# 运行所有测试 mix test # 运行测试并生成覆盖率报告 mix test --cover # 运行特定测试文件 mix test test/trace/worker_test.exs mix test test/trace/handler_test.exs # 排除集成测试 mix test --exclude integration
当前覆盖率:89.0%
| 模块 | 覆盖率 | 代码行数 | 未覆盖行数 |
|---|---|---|---|
lib/tracer.ex | 100.0% | 5 | 0 |
lib/trace/supervisor.ex | 100.0% | 3 | 0 |
lib/trace/listener.ex | 100.0% | 5 | 0 |
lib/trace/worker.ex | 92.8% | 28 | 2 |
lib/nats_listener.ex | 90.9% | 11 | 1 |
lib/trace/handler.ex | 88.8% | 9 | 1 |
test/trace/worker_test.exs、test/trace/handler_test.exstest/integration_test.exstest/nats_listener_test.exstest/trace/supervisor_test.exselixir# mix.exs 中的测试依赖 {:mox, "~> 1.1", only: :test}, # 模拟框架 {:stream_data, "~> 1.0", only: :test}, # 属性测试 {:excoveralls, "~> 0.18", only: :test}, # 覆盖率报告 {:ex_machina, "~> 2.8", only: :test} # 测试数据生成
dockerfileFROM elixir:1.18.4 AS builder # 多阶段构建优化生产镜像 # 包含 libssl 用于加密操作
yaml# devspace.yaml deployments: - name: traceroute helm: chart: name: ./charts/traceroute
服务提供结构化日志:
bash# 生产构建 MIX_ENV=prod mix release # 生产 Docker 构建 docker build --build-arg BUILD_ENV=prod -t traceroute:prod . # Kubernetes 部署 kubectl apply -f k8s/
.tool-versions)mix setup 安装依赖mix testbash# 代码格式化 mix format # 静态分析 mix credo # 类型检查(如已配置) mix dialyzer # 完整质量检查套件 mix quality
详见 LICENSE 文件。
问题与支持:
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。






探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务