
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 instantlinux/nut-upsd /usr/lib/nut
入口点脚本可基于上述环境变量设置参数;每个驱动都有自己的参数(可通过挂载自定义ups.conf文件配置),文档如下:
MYDRIVER=liebert docker run --rm --entrypoint /usr/lib/nut/$MYDRIVER 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
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。






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