
instantlinux/nut-upsd
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 [***] 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或允许的命令列表,参见cmdvartab的CMDDESC值 | |
| 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-gced***) 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 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设置为小于系统默认值来防止内存不足错误:参见issue #1672。此处默认设置为2048。
若启动时看到以下错误消息:
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用户的密码 |
如需对此镜像进行改进,请参阅CONTRIBUTING。






manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务