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

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

ghcr.io/openfaas/classic-watchdog:63911ded4ab8ea1db52306d758ac0a436b4b06c8

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

Watchdog

Watchdog 提供外部世界与函数之间的接口。它为每个请求启动一个新进程,并使用 STDIO 进行通信。

上文所述:一个小型 Web 服务器或垫片,为每个传入的 HTTP 请求 fork 所需进程

上文所述:一个小型 Web 服务器或垫片,为每个传入的 HTTP 请求 fork 所需进程

每个函数都需要嵌入此二进制文件,并将其用作 ENTRYPOINT 或 CMD,实际上它是容器的 init 进程。一旦进程被 fork,Watchdog 会通过 stdin 传入 HTTP 请求,并通过 stdout 读取 HTTP 响应。这意味着您的进程无需了解任何 Web 或 HTTP 相关知识。

ENTRYPOINT、CMD、stdin、stdout

下一代:of-watchdog

您是否希望对 HTTP 响应、“热函数”、持久连接池或内存中缓存机器学习模型有更多控制?那么请查看新 of-watchdog 的 http 模式。

轻松创建新函数

通过 CLI 创建函数

创建函数最简单的方法是使用模板和 FaaS CLI。CLI 可让您无需了解 Docker 知识,只需用一种支持的编程语言编写处理程序文件即可。

  • 使用 OpenFaaS 创建您的第一个无服务器 Python 函数 使用 OpenFaaS 创建您的第一个无服务器 Python 函数

  • 阅读 FaaS CLI 教程 阅读 FaaS CLI 教程

深入了解

打包函数

回显函数的 Dockerfile 示例:

FROM ghcr.io/openfaas/classic-watchdog:0.3.4 AS watchdog

FROM alpine:3.22.1

RUN mkdir -p /home/app

COPY --from=watchdog /fwatchdog /usr/bin/fwatchdog
RUN chmod +x /usr/bin/fwatchdog

# 添加非 root 用户
RUN addgroup -S app && adduser app -S -G app
RUN chown app /home/app

WORKDIR /home/app

USER app

# 在此处填充示例 - 例如 "cat"、"sha512sum" 或 "node index.js"
ENV fprocess="cat"
# 设置为 true 可在函数日志中查看请求
ENV write_debug="false"

EXPOSE 8080

CMD ["fwatchdog"]

环境变量覆盖:

Watchdog 可通过环境变量进行配置。您必须始终指定 fprocess 变量。

选项用法说明
fprocess每次函数调用时要调用的进程(函数进程)。必须是 UNIX 二进制文件,通过 STDIN 接收输入并通过 STDOUT 输出
cgi_headers请求中的 HTTP 头通过环境变量提供 - 如 Http_X_Served_By 等。详见:处理头信息部分。默认启用
marshal_request不将原始 HTTP 正文重定向到 fprocess,而是先将其编组为 JSON。如果需要处理 HTTP 头且不想通过 cgi_headers 标志使用环境变量,请使用此选项
content_type为所有响应强制指定特定的 Content-Type 响应
write_timeout从函数写入响应正文的 HTTP 超时时间(秒)
read_timeout从客户端调用者读取有效负载的 HTTP 超时时间(秒)
healthcheck_interval容器编排器(如 kubelet)进行 HTTP 健康检查的间隔(秒)。用于优雅关闭
suppress_lockWatchdog 将尝试向 /tmp/ 写入锁文件以进行 swarm 健康检查 - 设置为 true 可禁用此行为
exec_timeout为每个传入请求执行的进程的硬超时(秒)。如果设置为 t...

fprocess、cgi_headers、Http_X_Served_By、marshal_request、cgi_headers、content_type、write_timeout、read_timeout、healthcheck_interval、suppress_lock、exec_timeout、write_debug、combine_output、stderr、max_inflight、jwt_auth、true、http://gateway.openfaas:8080、jwt_auth_debug、jwt_auth_local、true、http://127.0.0.1:8080

请求/响应的 Content-Type

默认情况下,watchdog 会将函数的响应与客户端的“Content-Type”匹配。

  • 如果客户端发送 Content-Type 为 application/json 的 JSON 请求,响应中将自动匹配该类型。
  • 如果客户端发送 Content-Type 为 text/plain 的 JSON 请求,响应中也将自动匹配该类型。

要覆盖所有响应的 Content-Type,请设置 content_type 环境变量。


项目仓库 README(补充)

Watchdog

Watchdog 提供了外部世界与函数之间的接口。它为每个请求启动一个新进程,并使用 STDIO 进行通信。

上文所述:一个小型 Web 服务器或垫片,为每个传入的 HTTP 请求 fork 所需进程

每个函数都需要嵌入此二进制文件,并将其用作 ENTRYPOINT 或 CMD,实际上它是容器的 init 进程。一旦进程被 fork,watchdog 会通过 stdin 传递 HTTP 请求,并通过 stdout 读取 HTTP 响应。这意味着您的进程无需了解任何 Web 或 HTTP 相关知识。

下一代:of-watchdog

您是否希望更好地控制 HTTP 响应、“热函数”、持久连接池或在内存中缓存机器学习模型?那么请查看新 https://github.com/openfaas-incubator/of-watchdog 的 http 模式。

轻松创建新函数

通过 CLI 创建函数

创建函数最简单的方法是使用模板和 FaaS CLI。CLI 可以让您无需了解 Docker 知识,只需用一种支持的编程语言编写处理程序文件即可。

  • 使用 OpenFaaS 创建您的第一个无服务器 Python 函数
  • https://github.com/openfaas/faas-cli

深入了解

打包函数

echo 函数的 Dockerfile 示例:

FROM ghcr.io/openfaas/classic-watchdog:0.3.4 AS watchdog

FROM alpine:3.22.1

RUN mkdir -p /home/app

COPY --from=watchdog /fwatchdog /usr/bin/fwatchdog
RUN chmod +x /usr/bin/fwatchdog

# Add non root user
RUN addgroup -S app && adduser app -S -G app
RUN chown app /home/app

WORKDIR /home/app

USER app

# Populate example here - i.e. "cat", "sha512sum" or "node index.js"
ENV fprocess="cat"
# Set to true to see request in function logs
ENV write_debug="false"

EXPOSE 8080

CMD ["fwatchdog"]

环境变量覆盖:

Watchdog 可通过环境变量进行配置。您必须始终指定 fprocess 变量。

选项用途
fprocess每次函数调用时要调用的进程(函数进程)。必须是 UNIX 二进制文件,并通过 STDIN 接受输入,通过 STDOUT 输出
cgi_headers请求中的 HTTP 头通过环境变量提供,例如 Http_X_Served_By 等。详见:处理头信息 部分。默认启用
marshal_request不将原始 HTTP 正文重定向到 fprocess,而是先将其序列化为 JSON。如果需要处理 HTTP 头且不想通过 cgi_headers 标志使用环境变量,请使用此选项
content_type为所有响应强制设置特定的 Content-Type
write_timeout函数写入响应正文的 HTTP 超时时间(秒)
read_timeout从客户端调用者读取有效负载的 HTTP 超时时间(秒)
healthcheck_interval容器编排器(如 kubelet)进行 HTTP 健康检查的间隔(秒)。用于优雅关闭
suppress_lockWatchdog 会尝试向 /tmp/ 写入锁定文件以进行 swarm 健康检查 - 设置为 true 可禁用此行为
exec_timeout为每个传入请求执行的进程的硬超时时间(秒)。设为 0 则禁用
write_debug将所有输出、错误消息和附加信息写入日志。默认值为 false
combine_output默认值为 true - 在函数响应中合并 stdout/stderr;设为 false 时,stderr 写入容器日志,stdout 用于函数响应
max_inflight限制最大并发请求数
jwt_auth仅适用于 OpenFaaS for Enterprises 客户。设为 true 时,watchdog 要求在 Authorization 头中传递 JWT token 作为 Bearer token。此 token 只能通过 OpenFaaS 网关使用 http://gateway.openfaas:8080 地址作为授权机构进行令牌交换获取
jwt_auth_debug打印 JWT 身份验证过程的调试消息(仅适用于 OpenFaaS for Enterprises)
jwt_auth_local设为 true 时,watchdog 将尝试使用端口转发或运行在 http://127.0.0.1:8080 的本地网关验证 JWT token,而非通过集群内服务名称访问(仅适用于 OpenFaaS for Enterprises)

指标

名称描述类型
http_requests_total请求总数Counter
http_request_duration_seconds请求持续时间Histogram
http_requests_in_flight并发请求数Gauge

高级/调优

(新增)of-watchdog 与 HTTP 模式

  • of-watchdog

每个请求 fork 一个新进程具有进程隔离、可移植性和简单性等优势。任何进程都可以无需额外代码即可转换为函数。of-watchdog 及其“HTTP”模式是一种优化,可在所有请求之间维持单个进程。

新版本的 watchdog 正在 https://github.com/openfaas-incubator/of-watchdog 进行测试。

此次重写主要是为了持续维护的结构调整。它将成为现有 watchdog 的即插即用替代品,并提供二进制版本。

优雅关闭

Watchdog 能够与健康检查配合以实现优雅关闭。

当 watchdog 进程中检测到 SIGTERM 信号时,Go 协程将删除 /tmp/.lock 文件,并将 HTTP 健康检查标记为不健康,返回 HTTP 503。然后代码将等待 write_timeout 中指定的持续时间。在此期间,容器编排器的健康检查必须运行并完成。

现在编排器会将此副本标记为不健康,并将其从有效 HTTP 端点池中移除。

现在我们将停止接受新连接,并等待 write_timeout 中定义的值,然后最终允许进程退出。

使用 HTTP 头

头信息和其他请求信息会以以下格式注入到环境变量中:

X-Forwarded-By 头会以 Http_X_Forwarded_By 的形式可用

  • Http_Method - GET/POST 等
  • Http_Query - 查询字符串值
  • Http_ContentLength 和 Http_Content_Length - 提供看门狗接收到的传入 HTTP 请求的总内容长度,见下方说明
  • Http_Transfer_Encoding - 仅在提供时设置,若设置为 chunked,则 Content-Length 将为 -1,表示不适用

此行为由 cgi_headers 环境变量启用,该变量默认启用(true)。

以下是一个带有附加头和查询字符串的 POST 请求示例。

$ cgi_headers=true fprocess=env ./watchdog &
2017/06/23 17:02:58 Writing lock-file to: /tmp/.lock

$ curl "localhost:8080?q=serverless&page=1" -X POST -H X-Forwarded-By:http://my.vpn.com

如果在 Linux 系统上将 fprocess 设置为 env,你会看到以下内容:

Http_User_Agent=curl/7.43.0
Http_Accept=*/*
Http_X_Forwarded_By=http://my.vpn.com
Http_Method=POST
Http_Query=q=serverless&page=1

你也可以使用 GET 方法:

$ curl "localhost:8080?action=quote&qty=1&productId=105"

看门狗的输出将是:

Http_User_Agent=curl/7.43.0
Http_Accept=*/*
Http_Method=GET
Http_Query=action=quote&qty=1&productId=105

现在你可以在应用程序中使用 HTTP 状态来做出决策。

HTTP 方法

看门狗支持的 HTTP 方法如下:

带请求体:

  • POST, PUT, DELETE, UPDATE

不带请求体:

  • GET

API Gateway 当前支持函数的 POST 路由。

请求/响应的 Content-Type

默认情况下,看门狗会将函数的响应与客户端的 "Content-Type" 匹配。

  • 如果客户端发送 Content-Type 为 application/json 的 JSON 请求,响应中会自动匹配此类型。
  • 如果客户端发送 Content-Type 为 text/plain 的 JSON 请求,响应中也会自动匹配此类型

要覆盖所有响应的 Content-Type,请设置 content_type 环境变量。

轩辕镜像配置手册

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

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