专属域名
文档搜索
轩辕助手
Run助手
邀请有礼
返回顶部
快速返回页面顶部
收起
收起工具栏
轩辕镜像 官方专业版
轩辕镜像
专业版
轩辕镜像 官方专业版
轩辕镜像
专业版
首页个人中心搜索镜像

交易
充值流量我的订单
工具
提交工单镜像收录一键安装
Npm 源Pip 源Homebrew 源
帮助
常见问题轩辕镜像免费版
其他
关于我们网站地图
热门搜索:
ghcr.io/openfaas/of-watchdog

ghcr.io/openfaas/of-watchdog:5d4cadcaf595f3d3d213e08cdd38a310c5bb3066

ghcr.iolinux/amd645d4cadcaf595f3d3d213e08cdd38a310c5bb3066大小: 未知更新于 2026年5月23日

of-watchdog

用于使用 STDIO/HTTP 的函数的反向代理/中间件

of-watchdog 实现了一个监听端口 8080 的 HTTP 服务器,并作为运行中函数和微服务的反向代理。它可以独立使用,也可以作为 OpenFaaS 容器的入口点。

of-watchdog 此版本的 OpenFaaS 看门狗增加了对 HTTP 代理和 STDIO 的支持,这实现了内存重用和极快的请求服务。它不旨在替代 Classic Watchdog,而是为需要这些功能的用户提供另一种选择。

可通过 GitHub releases 下载,但该看门狗旨在通过多阶段构建从发布到 ghcr.io 的容器镜像中复制:

FROM --platform=${TARGETPLATFORM:-linux/amd64} ghcr.io/openfaas/of-watchdog:0.9.11 as watchdog
FROM --platform=${TARGETPLATFORM:-linux/amd64} node:18-alpine as ship

COPY --from=watchdog /fwatchdog /usr/bin/fwatchdog

参见示例模板

目标

  • 通过使用 HTTP 保持函数进程活跃,以实现更低延迟、缓存和持久连接
  • 支持从函数流式传输大型响应,超出容器的 RAM 或磁盘容量
  • 为每种“模式”提供更清晰的抽象

模式

of-watchdog 提供多种模式,这些模式会改变它与微服务或函数代码的交互方式。

三种看门狗模式的比较。左上角 - Classic Watchdog,右上角:afterburn(已弃用),左下角 - of-watchdog 的 HTTP 模式。

三种看门狗模式的比较。左上角 - Classic Watchdog,右上角:afterburn(已弃用),左下角 - of-watchdog 的 HTTP 模式。

  • HTTP 模式 - 默认且最高效的选项,如果目标语言有 HTTP 服务器实现,所有模板作者都应考虑此选项。
  • 序列化模式 - 当不存在 HTTP 服务器实现时,STDIO 被读入内存,然后发送到一个 fork 的进程中。
  • 流式模式 - 与序列化模式类似,但请求和响应均采用流式传输,而非在函数开始运行前完全缓冲到内存中。

API

由看门狗提供的私有端点:

  • /_/health - 当进程启动时返回 true,或者如果使用了锁文件,则当该文件存在时返回 true。 /_/health
  • //ready - 与 //health 类似,但如果 max_inflight 配置为非零值,且达到最大连接数,则返回 429 状态 /_/ready``/_/health``max_inflight

其他所有 HTTP 请求:

  • /* 任何其他路径和 HTTP 谓词都发送到函数 /*

1. HTTP (mode=http)

1.1 状态

对于目标语言有可用 HTTP 服务器实现的所有模板,推荐使用 HTTP 模式。

参见一些不同的模板示例,更多模板可通过 faas-cli template store list 获取,例如 golang-middleware、python3-http 和 node*。

faas-cli template store list``golang-middleware``python3-http``node*

要获取特定模板的仓库,请使用 faas-cli template store describe NAME。

faas-cli template store describe NAME

1.2 描述

看门狗启动时会 fork 一个进程,然后将传入看门狗的所有请求转发到容器内的 HTTP 端口。

优点:

  • 高并发和高吞吐量的最快选项
  • 与 fork 模型相比,并发和 RAM 使用更高效
  • 数据库连接可在容器生命周期内保持持久
  • 文件或模型可作为一次性初始化任务获取并存储在 /tmp/ 中,供之后的所有请求使用 /tmp/
  • 不需要像 afterburn 那样的新/自定义客户端库,而是使用长期运行的守护进程,如 Node 的 Express.js 或 Python 的 Flask

测试示例用法:

  • 转发到 Nginx 容器:
$ go build && mode=http port=8081 fprocess="docker run -p 80:80 --name nginx -t nginx" upstream_url=http://127.0.0.1:80 ./of-watchdog
  • 转发到 Node.js / Express.js hello-world 应用:
$ go build && mode=http port=8081 fprocess="node expressjs-hello-world.js" upstream_url=http://127.0.0.1:3000 ./of-watchdog

缺点:

  • 客户端和函数之间的链中多了一次 HTTP 跳转
  • 像 express/flask/sinatra 这样的守护进程以这种方式使用时可能不可预测,因此可能需要额外配置
  • 与 fork 模型相比,调用之间可能会占用额外内存

1.3 结构化日志

目前无法将看门狗自身的消息以 JSON 格式输出:

2024/04/25 17:29:06 Listening on port: 8080
2024/04/25 17:29:06 Writing lock-file to: /tmp/.lock
2024/04/25 17:29:06 Metrics listening on port: 8081
2024/04/25 17:29:08 GET / - 301 Moved Permanently - ContentLength: 39B (0.0049s) [test]

不过,您可以用 JSON 编写自己的日志行。只需将 prefix_logs 环境变量设置为 false,即可移除看门狗原本会添加的默认前缀。

prefix_logs``false

启用 prefix_logs 时:

prefix_logs

2024-04-24T21:00:04Z {"msg": "unable to connect to database"}

禁用 prefix_logs 时:

prefix_logs

{"msg": "unable to connect to database"}

1.4 追踪/关联 ID

网关会发送 X-Call-Id 头,您应在自己的日志记录器中使用该头来关联和追踪请求。

X-Call-Id

在 HTTP 模式下,如果将 log_callid 环境变量设置为 true,看门狗会将 X-Call-Id 附加到其自己的 HTTP 日志消息的方括号中:

log_callid

2024/04/25 17:29:58 GET / - 301 Moved Permanently - ContentLength: 39B (0.0037s) [079d9ff9-d7b7-4e37-b195-5ad520e6f797]

1.5 缩短超时时间

如果函数通过 exec_timeout 设置了较大的超时时间(如 1h),但您需要单个请求提前超时(例如 1m),则可以通过 HTTP 头 X-Timeout 传递 Go 持续时间来覆盖此行为。

exec_timeout``1h``1m``X-Timeout

X-Timeout 的值必须等于或短于 exec_timeout 环境变量。

X-Timeout``exec_timeout

当 exec_timeout 设置为 0 或未指定时,无法设置 X-Timeout。

X-Timeout``exec_timeout

由于输入/输出直接连接到响应以实现流式传输效率,函数开始执行后无法发送HTTP headers。除非进程分叉出现问题,否则响应码始终为200。中途错误必须由客户端捕获。多线程。

3. 流式派生(mode=streaming)- 默认模式

每个请求派生一个进程,能够处理大于内存容量的请求体——例如,512MB内存的虚拟机可以处理多个GB的视频。

由于输入/输出直接连接到响应以实现流式传输效率,函数开始执行后无法发送HTTP头。响应代码始终为200,除非派生进程时出现问题。中途错误必须由客户端检测。多线程。

  • 执行进程将输出打印到stdout后,输入会立即发送回客户端。
  • 可以预先设置静态Content-type。
  • 执行超时:支持。

4. 静态模式(mode=static)

此模式启动一个HTTP文件服务器,用于提供static_path指定目录中的静态内容。

请参见Hugo博客文章中的示例。

选项用法
write_debug在经典watchdog中,此选项将响应体打印到控制台
read_debug在经典watchdog中,此选项将请求体打印到控制台
combined_output在经典watchdog中,此选项会在函数的HTTP响应中返回STDOUT和STDERR;关闭时仅返回STDOUT,并将STDERR打印到watchdog的日志中

轩辕镜像配置手册

探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式

Docker 配置

登录仓库拉取

通过 Docker 登录认证访问私有仓库

专属域名拉取

无需登录使用专属域名

K8s Containerd

Kubernetes 集群配置 Containerd

K3s

K3s 轻量级 Kubernetes 镜像加速

Dev Containers

VS Code Dev Containers 配置

Podman

Podman 容器引擎配置

Singularity/Apptainer

HPC 科学计算容器配置

其他仓库配置

ghcr、Quay、nvcr 等镜像仓库

Harbor 镜像源配置

Harbor Proxy Repository 对接专属域名

Portainer 镜像源配置

Portainer Registries 加速拉取

Nexus 镜像源配置

Nexus3 Docker Proxy 内网缓存

系统配置

Linux

在 Linux 系统配置镜像服务

Windows/Mac

在 Docker Desktop 配置镜像

MacOS OrbStack

MacOS OrbStack 容器配置

Docker Compose

Docker Compose 项目配置

NAS 设备

群晖

Synology 群晖 NAS 配置

飞牛

飞牛 fnOS 系统配置镜像

绿联

绿联 NAS 系统配置镜像

威联通

QNAP 威联通 NAS 配置

极空间

极空间 NAS 系统配置服务

网络设备

爱快路由

爱快 iKuai 路由系统配置

宝塔面板

在宝塔面板一键配置镜像

需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单

镜像拉取常见问题

使用与功能问题

配置了专属域名后,docker search 为什么会报错?

docker search 限制

Docker Hub 上有的镜像,为什么在轩辕镜像网站搜不到?

站内搜不到镜像

机器不能直连外网时,怎么用 docker save / load 迁镜像?

离线 save/load

docker pull 拉插件报错(plugin v1+json)怎么办?

插件要用 plugin install

WSL 里 Docker 拉镜像特别慢,怎么排查和优化?

WSL 拉取慢

轩辕镜像安全吗?如何用 digest 校验镜像没被篡改?

安全与 digest

第一次用轩辕镜像拉 Docker 镜像,要怎么登录和配置?

新手拉取配置

轩辕镜像合规吗?轩辕镜像的合规是怎么做的?

镜像合规机制

轩辕镜像支持 docker push 上传本地镜像吗?

不支持 push

错误码与失败问题

docker pull 提示 manifest unknown 怎么办?

manifest unknown

docker pull 提示 no matching manifest 怎么办?

no matching manifest(架构)

镜像已拉取完成,却提示 invalid tar header 或 failed to register layer 怎么办?

invalid tar header(解压)

Docker pull 时 HTTPS / TLS 证书验证失败怎么办?

TLS 证书失败

Docker pull 时 DNS 解析超时或连不上仓库怎么办?

DNS 超时

docker 无法连接轩辕镜像域名怎么办?

域名连通性排查

Docker 拉取出现 410 Gone 怎么办?

410 Gone 排查

出现 402 或「流量用尽」提示怎么办?

402 与流量用尽

Docker 拉取提示 UNAUTHORIZED(401)怎么办?

401 认证失败

遇到 429 Too Many Requests(请求太频繁)怎么办?

429 限流

docker login 提示 Cannot autolaunch D-Bus,还算登录成功吗?

D-Bus 凭证提示

为什么会出现「单层超过 20GB」或 413,无法加速拉取?

413 与超大单层

账号 / 计费 / 权限

轩辕镜像免费版和专业版有什么区别?

免费版与专业版区别

轩辕镜像支持哪些 Docker 镜像仓库?

支持的镜像仓库

镜像拉取失败还会不会扣流量?

失败是否计费

麒麟 V10 / 统信 UOS 提示 KYSEC 权限不够怎么办?

KYSEC 拦截脚本

如何在轩辕镜像申请开具发票?

申请开票

怎么修改轩辕镜像的网站登录和仓库登录密码?

修改登录密码

如何注销轩辕镜像账户?要注意什么?

注销账户

配置与原理类

写了 registry-mirrors,为什么还是走官方或仍然报错?

mirrors 不生效

怎么用 docker tag 去掉镜像名里的轩辕域名前缀?

去掉域名前缀

如何拉取指定 CPU 架构的镜像(如 ARM64、AMD64)?

指定架构拉取

用轩辕镜像拉镜像时快时慢,常见原因有哪些?

拉取速度原因

为什么拉取镜像的 :latest 标签,拿到的往往不是「最新」镜像?

latest 与「最新」

查看全部问题→

用户好评

来自真实用户的反馈,见证轩辕镜像的优质服务

用户头像

oldzhang

运维工程师

Linux服务器

5

"Docker访问体验非常流畅,大镜像也能快速完成下载。"

轩辕镜像
镜像详情
...
ghcr.io/openfaas/of-watchdog
博客Docker 镜像公告与技术博客
热门查看热门 Docker 镜像推荐
安装一键安装 Docker 并配置镜像源
镜像拉取问题咨询请 提交工单。官方公众号:源码跳动。官方技术交流群:51517718。轩辕镜像所有镜像均来源于原始仓库,本站不存储、不修改、不传播任何镜像内容。
镜像拉取问题咨询请提交工单。官方公众号:源码跳动。官方技术交流群:。轩辕镜像所有镜像均来源于原始仓库,本站不存储、不修改、不传播任何镜像内容。
商务合作:点击复制邮箱
©2024-2026 源码跳动
商务合作:点击复制邮箱Copyright © 2024-2026 杭州源码跳动科技有限公司. All rights reserved.