
LibreNMS 的 Docker 镜像
⚠️ 本文档引用 master 分支,不一定与您运行的版本对应。
建议从您首选版本的源代码归档中提取 README。版本列表见 https://github.com/jarischaefer/docker-librenms/releases%E3%80%82
docker-librenms 是基于 Ubuntu 的 LibreNMS 可定制 Docker 镜像。
容器运行 nginx 1.18+(支持 HTTP/2)、PHP 8.3 FPM(带 OPCache)和 rrdcached,以实现最佳性能。
⚠️ ARM 支持为实验性,详见 https://github.com/jarischaefer/docker-librenms/issues/114%E3%80%82
您必须首先生成唯一的加密密钥。
生成密钥
bashdocker run --rm jarischaefer/docker-librenms generate_key
输出示例
base64:Q0+ZV56/5Uwz79vsvS4ZfwQFOty3e9DJEouEy+IXvz8=
⚠️ 确保密钥保密,因为拥有密钥的任何人都可以解密敏感数据。
目前有两种方法可将加密密钥传递给 LibreNMS。无论使用哪种方法,都必须包含完整密钥(包括 base64:)。
可通过 docker run 命令中的 APP_KEY 环境变量传递密钥。
示例
以下命令不完整,仅演示环境变量传递:
bashdocker run -e APP_KEY=base64:Q0+ZV56/5Uwz79vsvS4ZfwQFOty3e9DJEouEy+IXvz8= jarischaefer/docker-librenms
或者,您可以使用 APP_KEY_FILE 环境变量,并将密钥文件挂载到容器内。必须先在主机上创建文件,然后再启动容器(否则 Docker 会创建并挂载目录而非文件)。
示例
以下命令不完整,仅演示环境变量和文件挂载:
bashdocker run -e APP_KEY_FILE=/mount/secret_key -v /path/on/host/secret_key:/mount/secret_key
如果您尚未在 Docker 或其他地方设置 MySQL 服务器,可以创建一个 Docker 容器,详见 此处。
您应阅读 LibreNMS 安装文档 获取数据库设置的最新说明。
截至 2020 年 7 月,需要以下设置(适用于 MariaDB 和 MySQL):
innodb_file_per_table=1 lower_case_table_names=0
此时应已运行 MySQL 服务器。运行命令前,请确保数据库、用户和权限已存在。
接下来,按照 运行容器 中的说明操作。容器启动后,可使用以下命令填充数据库并创建管理员用户。
创建表
bashdocker exec librenms setup_database
创建初始管理员用户
bashdocker exec librenms create_admin
创建的用户属性如下:
创建自定义用户
bashdocker exec librenms create_user user password role email
示例:
bashdocker exec librenms create_user admin secret admin admin@example.com docker exec librenms create_user joe secret normal normal@example.com docker exec librenms create_user read secret global-read read@example.com
以下示例未涵盖所有可用配置选项,完整列表请参见文档相应部分。
以下示例中,链接的容器名为 my-database-container,其在容器内的别名为 database。如果您要修改,请确保 my-database-container 与 MySQL 容器名称匹配,DB_HOST 与容器内别名匹配。
bashdocker run \ -d \ -h librenms \ -p 80:80 \ -e APP_KEY=您生成的密钥 \ -e DB_HOST=database \ -e DB_NAME=librenms \ -e DB_USER=librenms \ -e DB_PASS=secret \ -e BASE_URL=http://localhost \ --link my-database-container:database \ -v /data/logs:/opt/librenms/logs \ -v /data/rrd:/opt/librenms/rrd \ --name librenms \ jarischaefer/docker-librenms
bashdocker run \ -d \ -h librenms \ -p 80:80 \ -e APP_KEY=您生成的密钥 \ -e DB_HOST=x.x.x.x \ -e DB_NAME=librenms \ -e DB_USER=librenms \ -e DB_PASS=secret \ -e BASE_URL=http://localhost \ -v /data/logs:/opt/librenms/logs \ -v /data/rrd:/opt/librenms/rrd \ --name librenms \ jarischaefer/docker-librenms
挂载包含 ssl.key、ssl.crt(可选 ssl.ocsp.crt)的目录以启用 HTTPS。还需修改 BASE_URL 并添加 SESSION_SECURE_COOKIE=true。
bashdocker run \ -d \ -h librenms \ -p 80:80 \ -p 443:443 \ -e APP_KEY=您生成的密钥 \ -e DB_HOST=database \ -e DB_NAME=librenms \ -e DB_USER=librenms \ -e DB_PASS=secret \ -e BASE_URL=https://localhost \ --link my-database-container:database \ -v /data/logs:/opt/librenms/logs \ -v /data/rrd:/opt/librenms/rrd \ -v /data/ssl:/etc/nginx/ssl:ro \ --name librenms \ jarischaefer/docker-librenms
更新现有安装需同时更新镜像和数据库。
docker pull jarischaefer/docker-librenms:{release}自动数据库更新是单容器设置的最便捷方案。
运行 docker exec librenms setup_database。
若要在启动时自动更新数据库,可传递 DAILY_ON_STARTUP=true。请注意,同时重启多个容器可能导致并发问题并损坏数据库。
LibreNMS 实现(截至 2018 年 10 月)通过 memcache 分布式锁避免此问题。因此,若所有容器共享同一 memcache 实例,并发重启是安全的。
⚠️ 配置更改需停止、删除并重启容器才能生效。
以下配置项可通过 -e 参数直接传递:
| 键 | 默认值 | 描述 |
|---|---|---|
| APP_KEY | 加密密钥 | |
| APP_KEY_FILE | 通过文件/密钥挂载的加密密钥 | |
| BASE_URL | LibreNMS 基础 URL(如 [***] | |
| DB_HOST | MySQL IP 或主机名 | |
| DB_PORT | 3306 | MySQL 端口 |
| DB_NAME | MySQL 数据库名 | |
| DB_USER | MySQL 用户 | |
| DB_PASS | MySQL 密码 | |
| DB_PASS_FILE | 通过密钥挂载的 MySQL 密码 | |
| TZ | UTC | 时区(如 Europe/Zurich) |
| PUID | 用户 ID | |
| PGID | 组 ID | |
| PHP_FPM_WORKERS_MIN | 1 | PHP-FPM 最小工作进程数 |
| PHP_FPM_WORKERS_MAX | 4 | PHP-FPM 最大工作进程数 |
| 键 | 默认值 | 描述 |
|---|---|---|
| DISABLE_IPV6 | false | 禁用 nginx IPv6 套接字 |
| MEMCACHED_ENABLE | false | 启用 memcached |
| MEMCACHED_HOST | memcached IP 或主机名 | |
| MEMCACHED_PORT | *** | memcached 端口 |
| NGINX_ENABLE | true | 启用 nginx |
| PHPFPM_ENABLE | true | 启用 PHP-FPM |
| RRDCACHED_ENABLE | true | 启用 rrdcached |
| RRDCACHED_CONNECT | unix:/var/run/rrdcached/rrdcached.sock | LibreNMS 连接的 rrdcached TCP 或 unix 套接字 |
| RRDCACHED_LISTEN | unix:/var/run/rrdcached/rrdcached.sock | rrdcached 监听的 TCP 或 unix 套接字 |
| SKIP_CHOWN | false | 禁用启动时(缓慢的)文件 chown 操作(可能对网络存储有帮助) |
| SNMPTRAPD_ENABLE | false | 启用 SNMP Trap Handler |
| SNMPTRAPD_MIBS | IF-MIB | 通过 -m 传递给 snmptrapd |
| SNMPTRAPD_MIBDIRS | /opt/librenms/mibs | 通过 -M 传递给 snmptrapd |
| LIBRENMS_SERVICE_ENABLE | false | 启用 librenms-service.py |
| LIBRENMS_SERVICE_OPTS | "" | librenms-service.py 选项(如 -v) |
⚠️ 部分值需用引号包裹(如 cron 计划)。
| 键 | 默认值 | 描述 |
|---|---|---|
| ALERTS_ENABLE | true | 启用 LibreNMS 告警 |
| BILLING_CALCULATE_ENABLE | true | 启用 LibreNMS 账单计算 |
| CHECK_SERVICES_ENABLE | true | 启用 LibreNMS 服务检查 |
| DAILY_ENABLE | true | 启用 LibreNMS 每日脚本 |
| DAILY_ON_STARTUP | false | 启动时运行 LibreNMS 每日脚本 |
| DISCOVERY_ENABLE | true | 启用 LibreNMS 发现功能 |
| DISCOVERY_THREADS | 1 | 发现线程数 |
| ENABLE_SYSLOG | false | 启用 LibreNMS syslog(详见) |
| POLL_BILLING_ENABLE | true | 启用 LibreNMS 账单轮询 |
| POLLERS_ENABLE | true | 启用 LibreNMS 轮询器 |
| POLLERS | 8 | 轮询器数量 |
| POLLERS_CRON | "*/5 * * * *" | 轮询器 cron 计划 |
| SNMP_SCAN_ENABLE | false | 启用 snmp-scan cron 任务 |
| SNMP_SCAN_CRON | "0 0 * * *" | snmp-scan cron 计划 |
| WEATHERMAP_ENABLE | false | 启用 https://github.com/librenms-plugins/Weathermap cron 任务(详见) |
| WEATHERMAP_CRON | "*/5 * * * *" | weathermap cron 计划 |
可通过挂载 *.php 文件到 /opt/librenms/conf.d 应用自定义配置。
以下示例将主机 /data/config.interfaces.php 挂载到容器 /opt/librenms/conf.d/config.interfaces.php:
bashdocker run \ -d \ -h librenms \ -p 80:80 \ -p 443:443 \ -e APP_KEY=您生成的密钥 \ -e DB_HOST=database \ -e DB_NAME=librenms \ -e DB_USER=librenms \ -e DB_PASS=secret \ -e BASE_URL=https://localhost \ --link my-database-container:database \ -v /data/logs:/opt/librenms/logs \ -v /data/rrd:/opt/librenms/rrd \ -v /data/ssl:/etc/nginx/ssl:ro \ -v /data/config.interfaces.php:/opt/librenms/conf.d/config.interfaces.php \ --name librenms \ jarischaefer/docker-librenms
config.interfaces.php
php<?php $config['bad_if_regexp'][] = '/^docker[-\w].*$/'; $config['bad_if_regexp'][] = '/^lxcbr[0-9]+$/'; $config['bad_if_regexp'][] = '/^veth.*$/'; $config['bad_if_regexp'][] = '/^virbr.*$/'; $config['bad_if_regexp'][] = '/^lo$/'; $config['bad_if_regexp'][] = '/^macvtap.*$/'; $config['bad_if_regexp'][] = '/gre.*$/'; $config['bad_if_regexp'][] = '/tun[0-9]+$/';
分布式 LibreNMS 安装中,可能需要禁用部分 https://github.com/jarischaefer/docker-librenms/blob/master/files/etc/cron.d/librenms%EF%BC%8C%E6%88%96%E6%9C%AC%E5%9C%B0 rrdcached、nginx 和 php-fpm 服务。也可增加 discovery-wrapper.py 线程数。
bashdocker run \ -d \ -h librenms \ -p 80:80 \ -e APP_KEY=您生成的密钥 \ -e DB_HOST=database \ -e DB_NAME=librenms \ -e DB_USER=librenms \ -e DB_PASS=secret \ -e BASE_URL=http://localhost \ -e POLLERS=16 \ -e TZ=UTC \ -e DISCOVERY_THREADS=2 \ -e DAILY_ENABLE=false \ -e ALERTS_ENABLE=false \ -e CHECK_SERVICES_ENABLE=false \ -e RRDCACHED_ENABLE=false \ -e NGINX_ENABLE=false \ -e PHPFPM_ENABLE=false \ --link my-database-container:database \ -v /data/logs:/opt/librenms/logs \ -v /data/rrd:/opt/librenms/rrd \ --name librenms \ jarischaefer/docker-librenms
在容器内执行命令前,需先从 /etc/librenms_environment 加载环境变量。
以下示例演示如何运行验证脚本:
bashsu - librenms source /etc/librenms_environment cd /opt/librenms php validate.php
上述命令仅为示例,需根据环境自定义。
另请注意:
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 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 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务