本站支持搜索的镜像仓库:Docker Hub、gcr.io、ghcr.io、quay.io、k8s.gcr.io、registry.gcr.io、elastic.co、mcr.microsoft.com

mendhak/http-https-echo 是一个 Docker 镜像,能够将各种 HTTP 请求属性回显给客户端,并同时记录到 Docker 容器日志中。它提供多种可操作响应输出的选项,完整功能列表参见下文。
!浏览器展示
该镜像可在 Docker Hub 获取:mendhak/http-https-echo:31
也可在 GitHub 容器仓库 获取:ghcr.io/mendhak/http-https-echo:31
请勿使用 :latest 标签,它可能会无预警地失效,请使用具体版本标签。
此镜像默认以非 root 用户执行,完全兼容 Kubernetes 或 OpenShift 部署。
docker run -p 8080:8080 -p 8443:8443 --rm -t mendhak/http-https-echo:31
docker-compose up
然后,通过浏览器或 curl 发送请求,观察响应内容及容器日志输出:
curl -k -X PUT -H "Arbitrary:Header" -d aaa=bbb https://localhost:8443/hello-world
可通过 HTTP_PORT 和 HTTPS_PORT 环境变量修改内部端口(默认 8080/8443)。
示例:将 HTTP 端口设为 8888,HTTPS 端口设为 9999
docker run -e HTTP_PORT=8888 -e HTTPS_PORT=9999 -p 8080:8888 -p 8443:9999 --rm -t mendhak/http-https-echo:31
Docker Compose 配置:
my-http-listener: image: mendhak/http-https-echo:31 environment: - HTTP_PORT=8888 - HTTPS_PORT=9999 ports: - "8080:8888" - "8443:9999"
默认证书路径为 /app/fullchain.pem(证书)和 /app/privkey.pem(私钥)。可通过卷挂载替换为自定义证书:
my-http-listener: image: mendhak/http-https-echo:31 ports: - "8080:8080" - "8443:8443" volumes: - /etc/ssl/certs/ssl-cert-snakeoil.pem:/app/fullchain.pem - /etc/ssl/private/ssl-cert-snakeoil.key:/app/privkey.pem
也可通过 HTTPS_CERT_FILE 和 HTTPS_KEY_FILE 环境变量指定容器内证书路径。
通过 JWT_HEADER 环境变量指定包含 JWT 的请求头,回显输出将包含解码后的 JWT 信息:
docker run -e JWT_HEADER=Authentication -p 8080:8080 -p 8443:8443 --rm -it mendhak/http-https-echo:31
发送包含 JWT 的请求(支持 Authentication: Bearer <token> 格式):
curl -k -H "Authentication: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c" http://localhost:8080/
响应中将出现 jwt 字段。
设置 DISABLE_REQUEST_LOGS=true 可禁用 ExpressJS 特定请求日志行(如 ::ffff:172.17.0.1 - - [03/Jan/2022:21:31:51 +0000] "GET /xyz HTTP/1.1" 200 423 "-" "curl/7.68.0"),JSON 输出不受影响:
docker run --rm -e DISABLE_REQUEST_LOGS=true --name http-echo-tests -p 8080:8080 -p 8443:8443 -t mendhak/http-https-echo:31
通过 LOG_IGNORE_PATH 环境变量设置无需详细记录到 stdout 的路径,可减少健康检查等场景的日志噪音:
docker run -e LOG_IGNORE_PATH=/ping -p 8080:8080 -p 8443:8443 --rm -t mendhak/http-https-echo:31
Docker Compose 配置:
my-http-listener: image: mendhak/http-https-echo:31 environment: - LOG_IGNORE_PATH=/ping ports: - "8080:8080" - "8443:8443"
当请求体为 JSON 且 Content-Type 为 application/json 时,响应将包含解析后的 JSON 数据:
curl -X POST -H "Content-Type: application/json" -d '{"a":"b"}' http://localhost:8080/
响应/输出中将出现 json 字段:
{ ... "xhr": false, "connection": {}, "json": { "a": "b" } }
设置 LOG_WITHOUT_NEWLINE=true 可禁用日志输出中的换行:
docker run -e LOG_WITHOUT_NEWLINE=true -p 8080:8080 -p 8443:8443 --rm -t mendhak/http-https-echo:31
设置 ECHO_BACK_TO_CLIENT=false 可禁用响应中的 JSON 输出:
docker run -e ECHO_BACK_TO_CLIENT=false -p 8080:8080 -p 8443:8443 --rm -t mendhak/http-https-echo:31
通过 x-set-response-status-code 头或查询参数设置响应状态码:
curl -v -H "x-set-response-status-code: 401" http://localhost:8080/
curl -v http://localhost:8080/some/path?x-set-response-status-code=401
响应状态码将变为:
HTTP/1.1 401 Unauthorized
通过 x-set-response-content-type 头或查询参数设置响应 Content-Type:
curl -H "X-Set-Response-Content-Type: text/plain" -kv https://localhost:8443/
curl -kv https://localhost:8443/path?x-set-response-content-type=text/plain
响应头将包含:
< Content-Type: text/plain; charset=utf-8
通过 x-set-response-delay-ms 头或查询参数设置响应延迟(毫秒),用于模拟慢响应:
curl -v -H "x-set-response-delay-ms: 6000" http://localhost:8080/
curl -v http://localhost:8080/some/path?x-set-response-delay-ms=6000
使用查询参数 response_body_only=true 可仅返回请求体,不包含元数据:
curl -s -k -X POST -d 'cauliflower' http://localhost:8080/a/b/c?response_body_only=true
输出将为 cauliflower。
设置 ECHO_INCLUDE_ENV_VARS=1 可在响应中包含容器进程可见的环境变量(默认不启用,因可能包含敏感信息):
docker run -d --rm -e ECHO_INCLUDE_ENV_VARS=1 --name http-echo-tests -p 8080:8080 -p 8443:8443 -t mendhak/http-https-echo:31
请求后响应中将出现 env 字段。
设置 MTLS_ENABLE=1 可在响应中包含客户端证书详情(客户端证书不会被验证)。
示例:使用 curl 传递客户端证书和密钥
curl -k --cert cert.pem --key privkey.pem https://localhost:8443/
响应中将包含客户端证书详情。
浏览器访问:Firefox 仅在导入与服务器同签发者的证书时才会提示选择客户端证书。如需浏览器提示,需将证书转换为 PKCS12 格式:
openssl pkcs12 -export -in cert.pem -inkey privkey.pem -out certpkcs12.pfx
设置 PROMETHEUS_ENABLED=true 可暴露 HTTP 性能指标,指标路径默认为 /metrics(基于 express-prom-bundle 中间件)。
可通过以下变量配置指标:
| 变量名 | 描述 | 默认值 |
|---|---|---|
| PROMETHEUS_ENABLED | 启用 Prometheus 中间件 | false |
| PROMETHEUS_METRICS_PATH | 指标暴露路径 | /metrics |
| PROMETHEUS_WITH_PATH | 按请求路径拆分指标 | false |
| PROMETHEUS_WITH_METHOD | 按 HTTP 方法拆分指标 | true |
| PROMETHEUS_WITH_STATUS | 按 HTTP 状态码拆分指标 | true |
| PROMETHEUS_METRIC_TYPE | 指标类型(histogram 或 summary) | summary |
更多详情参见 中间件文档。
!curl
!dockerlogs
docker build -t mendhak/http-https-echo .
./tests.sh
git tag -s 16 git push --tags
参见 changelog
免费版仅支持 Docker Hub 加速,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录方式配置轩辕镜像加速服务,包含7个详细步骤
在 Linux 系统上配置轩辕镜像源,支持主流发行版
在 Docker Desktop 中配置轩辕镜像加速,适用于桌面系统
在 Docker Compose 中使用轩辕镜像加速,支持容器编排
在 k8s 中配置 containerd 使用轩辕镜像加速
在宝塔面板中配置轩辕镜像加速,提升服务器管理效率
在 Synology 群晖NAS系统中配置轩辕镜像加速
在飞牛fnOS系统中配置轩辕镜像加速
在极空间NAS中配置轩辕镜像加速
在爱快ikuai系统中配置轩辕镜像加速
在绿联NAS系统中配置轩辕镜像加速
在威联通NAS系统中配置轩辕镜像加速
在 Podman 中配置轩辕镜像加速,支持多系统
配置轩辕镜像加速9大主流镜像仓库,包含详细配置步骤
无需登录即可使用轩辕镜像加速服务,更加便捷高效
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429