Fanap支持Docker容器化部署,简化安装和配置。
- Docker 20.10 或更高版本
- Linux系统(需要hwmon或thermal设备)
- 主机上的root权限或设备访问权限
- 容器需要
--privileged模式访问硬件设备
- 克隆或下载程序
git clone <repository-url>
cd fanap- 构建镜像
docker-compose build- 运行容器
docker-compose up -d- 查看日志
docker-compose logs -f- 构建镜像
docker build -t fanap:latest .- 运行容器
docker run -d \
--name fanap \
--privileged \
-e FANAP_VERBOSE=true \
fanap:latest说明:程序需要 root 权限访问 /sys/class/thermal/cooling_deviceX/cur_state 等硬件设备。容器必须以 root 用户运行并使用 --privileged 模式。
所有配置都可以通过环境变量设置:
| 环境变量 | 默认值 | 说明 |
|---|---|---|
FANAP_INTERVAL |
5s | 温度检查间隔 |
FANAP_LOW_TEMP |
40.0 | 低温阈值(摄氏度) |
FANAP_HIGH_TEMP |
75.0 | 高温阈值(摄氏度) |
FANAP_MIN_PWM |
50 | 最小PWM值 (0-255) |
FANAP_MAX_PWM |
255 | 最大PWM值 (0-255) |
FANAP_SENSOR |
auto | 温度传感器路径 |
FANAP_PWM |
auto | PWM风扇设备路径 |
FANAP_VERBOSE |
false | 详细日志输出 |
- 命令行参数 (最高优先级)
- 环境变量
- 默认值 (最低优先级)
docker run -d \
--name fanap \
--privileged \
-e FANAP_INTERVAL=10s \
-e FANAP_LOW_TEMP=35.0 \
-e FANAP_HIGH_TEMP=65.0 \
-e FANAP_MIN_PWM=0 \
-e FANAP_VERBOSE=true \
fanap:latest编辑 docker-compose.yml 文件中的 environment 部分:
environment:
- FANAP_INTERVAL=10s
- FANAP_LOW_TEMP=35.0
- FANAP_HIGH_TEMP=65.0
- FANAP_MIN_PWM=0
- FANAP_MAX_PWM=255
- FANAP_VERBOSE=true然后运行:
docker-compose up -d重要:Docker 容器必须以 root 用户运行并使用 --privileged 模式才能访问硬件设备(/sys/class/thermal 和 /sys/class/hwmon)。
推荐方法:使用特权模式
--privileged说明:
--privileged提供完整的设备访问权限- 容器需要写入
/sys/class/thermal/cooling_deviceX/cur_state等文件 - 即使使用卷挂载和
--cap-add,某些系统仍可能限制对/sys的写入 - QNAP等设备通常只需要thermal设备
使用卷映射保存日志:
-v fanap-logs:/var/log/fanap查看日志:
# 方法1: 使用docker logs
docker logs -f fanap
# 方法2: 直接访问持久化日志
docker exec fanap tail -f /var/log/fanap/fanap.logdocker ps | grep fanap
docker stats fanap# 实时日志
docker logs -f fanap
# 最近100行
docker logs --tail 100 fanapdocker exec -it fanap shdocker stop fanapdocker restart fanapdocker stop fanap
docker rm fanapdocker run -d \
--name fanap \
--restart unless-stopped \
--privileged \
-e FANAP_VERBOSE=false \
fanap:latest说明:生产环境推荐使用 --privileged 模式以确保对硬件设备的访问。
在 docker-compose.yml 中配置:
deploy:
resources:
limits:
cpus: '0.5'
memory: 128M
reservations:
cpus: '0.1'
memory: 64Mlogging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"检查设备权限:
docker logs fanap
# 查看是否有权限错误确保主机上的设备存在:
ls -la /sys/class/hwmon
ls -la /sys/class/thermal检查日志:
docker logs fanap手动运行诊断:
docker run --rm \
--privileged \
fanap:latest -check说明:诊断模式也需要 --privileged 模式访问硬件设备。
如果看到 permission denied 错误:
必须使用 --privileged 模式:
docker run -d \
--name fanap \
--privileged \
fanap:latest重要:即使使用卷挂载和 --cap-add SYS_RAWIO,某些系统仍会限制对 /sys/class/thermal/cooling_deviceX/cur_state 的写入。--privileged 模式是访问硬件设备的唯一可靠方式。
QNAP NAS使用thermal cooling device,确保映射了thermal设备:
docker run -d \
--name fanap \
--privileged \
-e FANAP_VERBOSE=true \
fanap:latest如果QNAP只使用thermal设备,可以使用更安全的权限方式:
docker run -d \
--name fanap \
--cap-add SYS_RAWIO \
-v /sys/class/thermal:/sys/class/thermal \
fanap:latestdocker stats fanapdocker inspect fanap- 最小化权限:只映射必要的设备
- 资源限制:限制CPU和内存使用
- 日志管理:配置日志轮转避免磁盘满
- 定期更新:保持镜像更新到最新版本
- 监控日志:定期检查日志文件大小
# 停止并删除旧容器
docker stop fanap
docker rm fanap
# 构建新镜像
docker build -t fanap:latest .
# 运行新容器
docker run -d \
--name fanap \
--privileged \
fanap:latest说明:确保使用 --privileged 模式。
# 重新构建并启动
docker-compose up -d --build# 停止并删除容器
docker stop fanap
docker rm fanap
# 删除镜像(可选)
docker rmi fanap:latest
# 删除卷(可选)
docker volume rm fanap-logs