
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
https://img.shields.io/docker/v/instantlinux/nut-upsd?sort=date](https://hub.docker.com/r/instantlinux/nut-upsd/tags "版本徽章") https://img.shields.io/docker/image-size/instantlinux/nut-upsd?sort=date](https://github.com/instantlinux/docker-tools/tree/main/images/nut-upsd "镜像大小徽章") https://img.shields.io/badge/dockerfile-latest-blue](https://gitlab.com/instantlinux/docker-tools/-/blob/main/images/nut-upsd/Dockerfile "dockerfile")
Alpine容器中的网络UPS工具(nut)包,包含支持Nagios监控UPS设备的配置。此多架构镜像支持Intel/AMD和ARM(如树莓派等)。
参见源代码目录中提供的kubernetes.yaml/docker-compose.yml文件;为访问USB设备,需以特权模式运行。
为API用户选择随机密码,并将其放入Docker密钥(若不使用swarm或kubernetes,可将其放在docker-compose.yml底部所示的文件路径中,例如/var/adm/admin/secrets/nut-upsd-password)。
容器将暴露TCP端口3493;要通过标准Nagios插件访问,需设置服务调用:
/usr/lib/nagios/plugins/check_ups -H <docker主机> -u <名称> [ -p <端口> ]
作为用于监控的只读服务,此容器不尝试锁定网络安全。
已通过最常见的UPS类型(APC消费级产品)验证;Tripp Lite型号也(可能)适用。CyberPower型号需将MAXAGE参数设置为长于默认值(25)。注意,APC的usbhid-ups驱动要求提供正确的12位硬件序列号。其他参数默认值均可正常工作。
若使用其他型号UPS,可通过将ups.conf、upsd.conf、upsmon.conf和/或upsd.users文件挂载到/etc/nut/local来覆盖默认配置。
若主机连接多个UPS,可运行多个此容器副本,并将每个容器的3493端口绑定到不同的TCP端口。
此仓库包含构建kubernetes集群的完整说明,可使用helm或kubernetes.yaml通过make启动,并在克隆仓库后自定义Makefile.vars:
git clone https://github.com/instantlinux/docker-tools.git cd docker-tools/k8s # 此make目标在Makefile.instances中定义 make nut-01
以下变量可根据需要从kubernetes.yaml或docker-compose.yml传递给镜像:
| 变量 | 默认值 | 描述 |
|---|---|---|
| ACTIONS | 允许的一个或多个用户操作(set、fsd) | |
| API_USER | upsmon | API用户 |
| API_PASSWORD | API密码(若不使用密钥) | |
| DESCRIPTION | UPS | 用户分配的描述 |
| DRIVER | usbhid-ups | 驱动(参见兼容性列表) |
| GROUP | nut | 本地组 |
| INSTCMDS | all或允许的命令列表,参见https://github.com/networkupstools/nut/blob/master/data/cmdvartab%E7%9A%84%60CMDDESC%60%E5%80%BC | |
| MAXAGE | 15 | 声明驱动无响应前的秒数 |
| NAME | ups | 用户分配的配置名称 |
| NOTIFYCMD | 通知时运行的脚本完整路径 | |
| NUT_DEBUG_LEVEL | 0 | 调试消息的详细程度 |
| NUT_QUIET_INIT_SSL | true | 禁止多余的启动警告 |
| NUT_QUIET_INIT_UPSNOTIFY | true | 禁止多余的启动警告 |
| POLLINTERVAL | ups.conf的轮询间隔 | |
| PORT | auto | 主机上的设备端口(例如/dev/ttyUSB0) |
| SDORDER | UPS关闭顺序,设为-1禁用关闭 | |
| SECRETNAME | nut-upsd-password | 用于API用户的密钥名称 |
| SERIAL | UPS的硬件序列号 | |
| SERVER | primary | 主实例在从实例之后关闭 |
| ULIMIT | 2048 | 打开文件数限制 |
| USER | nut | 本地用户 |
| VENDORID | ups.conf的供应商ID |
要定义通知脚本,通过docker-compose文件将其挂载到/usr/local/bin下,或在helm值覆盖中设置,并设置NOTIFYCMD环境变量。(不要将任何可执行脚本挂载到/etc/nut下,应放在/usr/local下)。
若需要除usbhid-ups外的其他驱动,可通过以下命令列出所有支持的驱动:
docker run --rm --entrypoint /bin/ls docker.xuanyuan.run/instantlinux/nut-upsd /usr/lib/nut
入口点脚本可基于上述环境变量设置参数;每个驱动都有自己的参数(可通过挂载自定义ups.conf文件配置),文档如下:
MYDRIVER=liebert docker run --rm --entrypoint /usr/lib/nut/$MYDRIVER docker.xuanyuan.run/instantlinux/nut-upsd -h Network UPS Tools - Liebert MultiLink UPS driver 1.02 (3.15.0_alpha20210804-3402-gced1683082) Warning: This is an experimental driver. Some features may not function correctly. usage: liebert -a <id> [OPTIONS] -a <id> - autoconfig using ups.conf section <id> - note: -x after -a overrides ups.conf settings -V - print version, then exit -L - print parseable list of driver variables -D - raise debugging level -q - raise log level threshold -h - display this help -k - force shutdown -i <int> - poll interval -r <dir> - chroot to <dir> -u <user> - switch to <user> (if started as root) -x <var>=<val> - set driver variable <var> to <val> - example: -x cable=940-0095B Acceptable values for -x or ups.conf in this driver: Override manufacturer name : -x mfr=<value> Override model name : -x model=<value>
对于Tripp Lite型号,可能需要在环境中指定VENDORID为09ae。还需检查是否需要设置POLLINTERVAL。对于任何品牌或型号,可通过主机上的root shell执行以下命令识别idVendor和iSerial值:
# lsusb ... Bus 001 Device 005: ID 051d:0002 American Power Conversion Uninterruptible Power Supply # lsusb -D /dev/bus/usb/001/005 Device: ID 051d:0002 American Power Conversion Uninterruptible Power Supply ... idVendor 0x051d American Power Conversion idProduct [0x0002](https://github.com/networkupstools/nut/issues/1672) Uninterruptible Power Supply bcdDevice 0.90 iManufacturer 1 American Power Conversion iProduct 2 Back-UPS RS 1500G FW:865.L6 .D USB FW:L6 iSerial 3 4B1624P26350
若需要udev规则设置权限,在运行容器前配置主机。例如:
cat >/etc/udev/rules.d/99-usb-serial.rules <<EOF ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="09ae", ATTRS{idProduct}=="2012", MODE="0660", GROUP="nut" EOF udevadm control --reload-rules && udevadm trigger
在Debian trixie下启动时,可通过将nofile ulimit设置为小于系统默认值来防止内存不足错误:参见https://github.com/networkupstools/nut/issues/1672%E3%80%82%E6%AD%A4%E5%A4%84%E9%BB%98%E8%AE%A4%E8%AE%BE%E7%BD%AE%E4%B8%BA2048%E3%80%82
若启动时看到以下错误消息:
Unable to use old-style MONITOR line without a username Convert it and add a username to upsd.users - see the documentation
最可能的原因是缺少或为空的密钥(nut-upsd-password)。
若API用户需要密码,有两种指定方式:将值本身作为环境变量API_PASSWORD传递(不安全),或按以下方式定义Docker密钥:
| 密钥 | 描述 |
|---|---|
| nut-upsd-password | API用户的密码 |
如需对此镜像进行改进,请参阅https://github.com/instantlinux/docker-tools/blob/main/CONTRIBUTING.md%E3%80%82
https://img.shields.io/badge/license-GPL--2.0-red.svg](https://choosealicense.com/licenses/gpl-2.0/ "许可证徽章") https://img.shields.io/badge/code-networkupstools%2Fnut-blue.svg](https://github.com/networkupstools/nut "代码仓库")
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务