
jauderho/toxiproxyjauderho/toxiproxy 是基于 Toxiproxy 的 Docker 镜像。Toxiproxy 是一个网络条件模拟框架,旨在帮助开发和测试人员模拟各类网络异常场景,如延迟、丢包、带宽限制等,以验证应用在不稳定网络环境下的表现。该镜像由社区维护,提供多平台支持,确保与上游 Toxiproxy 版本同步,上游发布后 1 小时内构建更新,并每周至少重建一次以保持镜像时效性。
通过 docker run 快速启动 Toxiproxy,默认监听 0.0.0.0:8474 并提供 HTTP API:
bashdocker run -d -p 8474:8474 --name toxiproxy jauderho/toxiproxy
通过环境变量调整 Toxiproxy 基础运行参数:
| 环境变量 | 说明 | 默认值 |
|---|---|---|
TOXIPROXY_HOST | 服务监听地址 | 0.0.0.0 |
TOXIPROXY_PORT | 服务监听端口 | 8474 |
TOXIPROXY_LOG_LEVEL | 日志级别(debug/info/warn/error) | info |
TOXIPROXY_CONFIG_FILE | 配置文件路径(容器内) | 无(需手动挂载) |
Toxiproxy 通过 JSON 配置文件定义代理规则,格式如下(示例文件 toxiproxy.json):
json{ "proxies": [ { "name": "web_service_proxy", // 代理名称(唯一标识) "upstream": "[***]", // 上游服务地址(目标服务) "listen": "0.0.0.0:8080", // 代理监听地址(容器内) "middleware": [ // 网络异常规则配置 { "name": "latency", // 延迟中间件 "attrs": { "latency": "500ms", // 固定延迟 "jitter": "100ms" // 延迟抖动范围 } }, { "name": "loss", // 丢包中间件 "attrs": { "loss": 10, // 丢包率(百分比) "correlation": 50 // 丢包相关性(0-100) } } ] } ] }
启动时挂载配置文件:
bashdocker run -d \ -p 8474:8474 \ -p 8080:8080 \ # 映射代理监听端口(对应配置文件中的 listen 端口) -v $(pwd)/toxiproxy.json:/toxiproxy.json \ -e TOXIPROXY_CONFIG_FILE=/toxiproxy.json \ --name toxiproxy jauderho/toxiproxy
创建 docker-compose.yml 集成 Toxiproxy 与测试服务:
yamlversion: "3.8" services: toxiproxy: image: jauderho/toxiproxy ports: - "8474:8474" # Toxiproxy API 端口 - "8080:8080" # 代理监听端口(对应配置文件中的 web_service_proxy) volumes: - ./toxiproxy.json:/toxiproxy.json environment: - TOXIPROXY_LOG_LEVEL=debug - TOXIPROXY_CONFIG_FILE=/toxiproxy.json depends_on: - web-service # 依赖的上游服务 web-service: image: nginx:alpine # 示例上游服务(可替换为实际服务) ports: - "80:80"
toxiproxy.json:json{ "proxies": [ { "name": "nginx_proxy", "upstream": "[***]", "listen": "0.0.0.0:8080", "middleware": [ { "name": "latency", "attrs": { "latency": "1s", "jitter": "200ms" } }, { "name": "loss", "attrs": { "loss": 15, "correlation": 30 } } ] } ] }
bashdocker-compose up -d
bashcurl http://localhost:8080 # 应感受到约 1 秒延迟,且部分请求失败(15% 丢包率)
Toxiproxy 提供 HTTP API 动态管理代理(默认地址 http://localhost:8474):
创建代理(添加带宽限制):
bashcurl -X POST http://localhost:8474/proxies \ -H "Content-Type: application/json" \ -d '{ "name": "bandwidth_proxy", "upstream": "tcp://db-service:3306", "listen": "0.0.0.0:3307", "middleware": [{"name": "bandwidth", "attrs": {"rate": "100kbit"}}] }'
查看代理列表:
bashcurl http://localhost:8474/proxies
删除代理:
bashcurl -X DELETE http://localhost:8474/proxies/bandwidth_proxy
644)listen 定义的代理端口与宿主机端口映射(如示例中的 8080:8080)upstream 地址(可通过 Docker 网络连接服务)8474)访问,避免未授权配置修改





manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务