
一个非常简单的webhook服务器,用于启动shell脚本。
!https://github.com/ncarlier/webhookd/raw/master/webhookd.svg
webhookd是一个轻量级的webhook服务器,允许通过HTTP请求触发shell脚本执行。它设计简洁,配置灵活,支持多种参数传递方式、实时日志流、通知机制、认证与签名验证等功能,适用于自动化部署、CI/CD流程触发、简单任务调度等场景。
基本部署
bash$ docker run -d --name=webhookd \ -v ${PWD}/scripts:/scripts \ -p 8080:8080 \ ncarlier/webhookd
高级功能镜像
官方镜像轻量适用于简单脚本,如需高级功能(如Docker CLI或Docker Compose交互),可使用ncarlier/webhookd:edge-distrib镜像:
bash$ docker run -d --name=webhookd \ -v ${PWD}/scripts:/scripts \ -v /var/run/docker.sock:/var/run/docker.sock \ -p 8080:8080 \ ncarlier/webhookd:edge-distrib
webhookd可通过命令行参数或环境变量配置,执行webhookd -h查看所有参数及对应环境变量。所有配置变量详见https://github.com/ncarlier/webhookd/blob/master/etc/default/webhookd.env%E6%96%87%E4%BB%B6%E3%80%82
核心配置项:
WHD_SCRIPTS/-script:脚本目录路径(默认./scripts)WHD_HOOK_TIMEOUT:全局webhook超时时间(秒,默认10)WHD_HOOK_LOG_DIR:日志存储目录WHD_NOTIFICATION_URI:通知目标URI(HTTP或Email)WHD_PASSWD_FILE:htpasswd认证文件路径WHD_TRUST_STORE_FILE:签名验证公钥文件(PEM格式)WHD_TLS:启用TLS(true/false)WHD_TLS_DOMAIN:ACME域名(启用ACME时)webhook通过脚本目录结构定义,默认位于./scripts(可通过WHD_SCRIPTS修改)。目录结构示例:
/scripts ├── /github │ ├── build.sh │ └── deploy.sh ├── push.js └── echo.sh
注:支持任何可执行文件(需添加shebang头),如
.sh、.js等。
URL路径对应脚本路径,可省略脚本扩展名(默认查找.sh文件)。示例:
/scripts/github/build.sh对应URL:http://localhost:8080/github/build/scripts/echo.sh对应URL:http://localhost:8080/echo响应流类型
GET方法且Accept: text/event-stream头POST方法或默认GET)脚本参数来源及转换规则:
?foo=bar → foo=bar)Content-Type → content_type)application/x-www-form-urlencoded:键值对转换为变量text/*或application/json:作为脚本第一个参数传递额外内置变量:
hook_id:自动递增的hook IDhook_name:hook名称hook_method:HTTP请求方法x_forwarded_for:客户端IPx_webauth_user:认证用户名(若启用认证)WHD_HOOK_TIMEOUT环境变量设置(秒)X-Hook-Timeout HTTP头覆盖(秒)示例:
bashcurl -H "X-Hook-Timeout: 5" http://localhost:8080/echo?foo=bar
X-Hook-ID头获取的ID访问http://localhost:8080/<NAME>/<ID>查看历史日志脚本执行后可发送通知,仅输出中以特定前缀(默认notify:)开头的行将被发送。通过WHD_NOTIFICATION_URI配置通知目标。
HTTP通知
配置URI:http://example.org?prefix=notify:(prefix可选,默认notify:)
POST payload格式:
json{ "id": "42", "name": "echo", "text": "notify: Hello World\n", "error": "错误信息(如有)" }
支持Mattermost、Slack、***等webhook端点。
Email通知
配置URI:mailto:user@example.com?smtp=smtp.example.com:587&username=user&password=pass&from=webhookd@example.com
支持参数:smtp(SMTP服务器)、username/password(认证信息)、conn(连接类型:tls/tls-insecure/plain)、from(发件人)、subject(主题)。
通过htpasswd文件启用HTTP基本认证:
bashhtpasswd -B -c .htpasswd api
bashexport WHD_PASSWD_FILE=/path/to/.htpasswd
bashcurl -u api:password -XPOST "http://localhost:8080/echo?msg=hello"
支持HTTP Signatures和Ed25519签名验证,需配置公钥文件(PEM格式):
bashexport WHD_TRUST_STORE_FILE=/path/to/pubkey.pem
HTTP Signatures示例:
bashcurl -X POST \ -H 'Date: Wed, 21 Oct 2015 07:28:00 GMT' \ -H 'Signature: keyId="my-key",algorithm="rsa-sha256",headers="(request-target) date",signature="base64-signature"' \ "http://localhost:8080/echo?msg=hello"
Ed25519签名示例:
bashcurl -X POST \ -H 'X-Signature-Timestamp: 1620000000' \ -H 'X-Signature-Ed25519: base64-signature' \ "http://localhost:8080/echo?msg=hello"
启用TLS加密:
bashdocker run -d --name=webhookd \ -v ${PWD}/scripts:/scripts \ -v ${PWD}/certs:/certs \ -p 443:443 \ -e WHD_TLS=true \ -e WHD_TLS_CERT_FILE=/certs/server.pem \ -e WHD_TLS_KEY_FILE=/certs/server.key \ ncarlier/webhookd
bashdocker run -d --name=webhookd \ -v ${PWD}/scripts:/scripts \ -v ${PWD}/acme:/acme \ -p 80:80 -p 443:443 \ -e WHD_TLS=true \ -e WHD_TLS_DOMAIN=hook.example.com \ ncarlier/webhookd
MIT许可证,详见https://github.com/ncarlier/webhookd/blob/master/LICENSE%E3%80%82
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。



探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 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 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务