NetXMS 7.0.1 Docker Compose 部署指南
使用 Docker Compose 部署 NetXMS 7.0.1 完整监控栈:db/init/server/agent/web 五服务编排、nxdbmgr 数据库初始化(含 213 张表验证)、Web 控制台首次登录、数据持久化与备份、等价 docker run、JVM 堆限制实测与升级排障实录。
NetXMS 7.0.1 Docker Compose 部署指南
目标:使用 Docker Compose 一键部署 NetXMS 7.0.1 完整监控栈(服务端 netxmsd、Web 控制台、监控代理 nxagentd、PostgreSQL 数据库与一次性数据库初始化任务共五个服务),覆盖数据库初始化、Web 控制台首次登录、数据持久化、JVM 堆限制、升级与排障全流程。全部步骤与回显均来自 Ubuntu 22.04 实测环境。
组件定位与技术背景见 《NetXMS 介绍与选型指南》,本文专注落地部署。
一、环境信息与版本选型
1.1 实测环境
| 项目 | 值 |
|---|---|
| 操作系统 | Ubuntu 22.04.5 LTS(x86_64) |
| Docker Engine | 27.x(含 Compose v2 插件) |
| NetXMS 版本 | 7.0.1(构建号 7.0-824-g44d7a0dfb5,2026-10-30 发布) |
| 数据库 | PostgreSQL 17 |
| 部署目录 | /opt/data/quzuo/tmp/netxms/stack |
| 服务端监听端口 | 宿主机 4701 → NXCP 4701(客户端连接端口) |
| Web 控制台端口 | 宿主机 8137 → HTTPS 8443 |
| 管理账号 | admin / q1w2e3r4(初始化时由 -p 参数设定) |
1.2 版本选型
| 镜像标签 | 对应版本 | 说明 |
|---|---|---|
ghcr.io/netxms/server:7.0.1 | NetXMS 7.0.1 | 当前最新稳定版(7.0 系列首个补丁版) |
ghcr.io/netxms/server:7.0.0 | NetXMS 7.0.0 | 7.0 大版本首发版 |
ghcr.io/netxms/server:6.2.6 | NetXMS 6.2.6 | 6.2 系列维护版,供暂不上 7.0 的环境过渡 |
版本信息于 2026-11-01 经 GitHub Releases 实查确认;三版要点与 7.0 系列新特性(热备 HA、NETCONF、Syslog over TLS、AI Operators 等)的完整梳理见 《NetXMS 介绍与选型指南》第二章。本文锁定 7.0.1。
1.3 镜像清单与体积
部署共需 4 个镜像,实测体积如下(docker images 回显):
| 镜像 | 体积 | 职责 |
|---|---|---|
| ghcr.io/netxms/server:7.0.1 | 311MB | 监控服务端 netxmsd + 命令行工具集(nxdbmgr/nxget/nxadm 等) |
| ghcr.io/netxms/agent:7.0.1 | 193MB | 监控代理 nxagentd |
| ghcr.io/netxms/web:7.0.1 | 796MB | Web 控制台(Jetty 托管 Java 应用) |
| postgres:17 | 646MB | 指标/事件/对象数据存储 |
关键差异:server 镜像内含全套 CLI 工具,排障时可直接进容器执行;web 镜像体积最大,因为内嵌了 Jetty 与 JDK。
二、前置条件
- 已安装 Docker Engine 与 Compose v2 插件:
docker --version && docker compose version
- 已规划部署目录与数据盘(本文使用 /opt/data/quzuo/tmp/netxms/stack,生产建议放到独立数据盘);
- 宿主机 4701 与 8137 端口未被占用(验证:
ss -lntp | grep -E '4701|8137'应无输出); - 镜像来自 GitHub 容器仓库 ghcr.io,境内网络拉取缓慢时可配置 Docker 代理(
/etc/systemd/system/docker.service.d/http-proxy.conf设置HTTPS_PROXY=http://<代理地址>后重启 docker),或先在有网络的机器docker pull后docker save/docker load搬运。
三、部署文件与目录结构
3.1 目录规划
/opt/data/quzuo/tmp/netxms/stack/
├── compose.yaml # 五服务编排
├── conf/
│ ├── netxmsd.conf # 服务端配置(数据库连接在此)
│ └── nxagentd.conf # 代理配置
└── data/ # 持久化数据(部署后自动生成)
├── db/ # PostgreSQL 数据目录
├── server/ # 服务端运行数据(服务器密钥 .server_key 等)
└── agent/ # 代理本地数据
说明:data/server 目录承载服务端的服务器密钥(.server_key)等本机数据,务必持久化——密钥丢失会导致历史加密数据与代理会话失效。
3.2 服务端配置 netxmsd.conf
保存为 conf/netxmsd.conf:
## Logging
LogFile={stdout}
## Database configuration - PostgreSQL
DBDriver=pgsql.ddr
DBServer=db
DBName=netxms
DBLogin=netxms
DBPassword=q1w2e3r4
DebugLevel=5
逐项说明:
| 配置项 | 含义 | 备注 |
|---|---|---|
| LogFile={stdout} | 日志输出到标准输出 | 容器化部署的标准做法,日志由 docker logs 收集 |
| DBDriver=pgsql.ddr | 数据库驱动 | PostgreSQL 对应 pgsql.ddr;另有 mysql.ddr/mssql.ddr 等 |
| DBServer=db | 数据库主机 | Compose 网络内的服务名,等价于真实部署中的数据库 IP/主机名 |
| DBName=netxms | 数据库名 | 与 db 服务的 POSTGRES_DB 环境变量一致 |
| DBLogin / DBPassword | 数据库账号 | 与 db 服务的 POSTGRES_USER/POSTGRES_PASSWORD 一致 |
| DebugLevel=5 | 调试级别 0–9 | 生产建议 0–3,5 便于首次部署排障 |
3.3 代理配置 nxagentd.conf
保存为 conf/nxagentd.conf:
[CORE]
# 允许来自监控服务器网段的连接(full access)
MasterServers=10.89.63.0/24
### Logging
LogFile={stdout}
#DebugLevel=0
SubAgent=filemgr
逐项说明:MasterServers 指定允许连接本代理的管理服务器地址/网段(代理侧访问控制,0.0.0.0/0 表示不限但仅限实验环境);LogFile={stdout} 同服务端;SubAgent=filemgr 加载文件管理子代理(提供远程文件浏览等扩展指标)——注意该模块在官方 agent 镜像中未随附,首启会产生一条加载失败日志,排障实录见第九章 9.2 节;生产部署时应按实际需要保留或删除此行。
3.4 Compose 编排文件
保存为 compose.yaml:
name: netxms-701-stack
services:
db:
image: postgres:17
container_name: netxms-7.0.1-db
restart: unless-stopped
environment:
POSTGRES_USER: netxms
POSTGRES_PASSWORD: q1w2e3r4
POSTGRES_DB: netxms
volumes:
- ./data/db:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U netxms"]
interval: 10s
timeout: 5s
retries: 5
networks:
- netxms-net
# 一次性初始化任务:库未初始化时执行 nxdbmgr init(-p 指定 admin 初始密码)
init:
image: ghcr.io/netxms/server:7.0.1
container_name: netxms-7.0.1-init
depends_on:
db:
condition: service_healthy
volumes:
- ./conf/netxmsd.conf:/etc/netxmsd.conf
entrypoint: ["/bin/sh", "-c", "nxdbmgr -q get DBLockStatus >/dev/null 2>&1; rc=$$?; if [ \"$$rc\" -ne 0 ]; then echo \"DB not initialized (rc=$$rc), running init...\"; nxdbmgr -p q1w2e3r4 init pgsql; else echo \"DB already initialized (rc=$$rc)\"; fi"]
networks:
- netxms-net
server:
image: ghcr.io/netxms/server:7.0.1
container_name: netxms-7.0.1-server
hostname: server
restart: unless-stopped
depends_on:
db:
condition: service_healthy
init:
condition: service_completed_successfully
volumes:
- ./conf/netxmsd.conf:/etc/netxmsd.conf
- ./data/server:/var/lib/netxms
ports:
- "4701:4701"
networks:
- netxms-net
agent:
image: ghcr.io/netxms/agent:7.0.1
container_name: netxms-7.0.1-agent
hostname: agent
restart: unless-stopped
depends_on:
- server
volumes:
- ./conf/nxagentd.conf:/etc/nxagentd.conf
- ./data/agent:/var/lib/netxms
networks:
- netxms-net
web:
image: ghcr.io/netxms/web:7.0.1
container_name: netxms-7.0.1-web
restart: unless-stopped
depends_on:
- server
environment:
KEYSTORE_PASSWORD: "changeit"
JAVA_OPTIONS: "-Xms256m -Xmx512m"
command:
- /bin/sh
- -c
- |
touch $${JETTY_BASE}/jetty-ssl.properties
echo "jetty.sslContext.keyStorePassword=$${KEYSTORE_PASSWORD:-changeit}" > $${JETTY_BASE}/jetty-ssl.properties
echo "jetty.ssl.sniRequired=false" >> $${JETTY_BASE}/jetty-ssl.properties
echo "jetty.ssl.sniHostCheck=false" >> $${JETTY_BASE}/jetty-ssl.properties
exec java $$JAVA_OPTIONS -jar $${JETTY_HOME}/start.jar $${JETTY_BASE}/jetty-ssl.properties
ports:
- "8137:8443"
networks:
- netxms-net
networks:
netxms-net:
driver: bridge
ipam:
config:
- subnet: 10.89.63.0/24
编排要点逐项解读:
| 服务 | 关键设计 |
|---|---|
| db | 带健康检查(pg_isready),后续服务按 condition: service_healthy 等待数据库真正可用 |
| init | 一次性任务:先用 nxdbmgr -q get DBLockStatus 探测库是否已初始化,未初始化才执行 nxdbmgr -p q1w2e3r4 init pgsql;-p 参数同时设定控制台管理账号 admin 的初始密码 |
| server | 依赖 init 成功完成(service_completed_successfully)才启动,保证启动时库表已就绪;对宿主机暴露 NXCP 端口 4701 |
| agent | 通过 Compose 网络内部 DNS 名连接服务端,不额外暴露端口(服务端经 NXCP 主动连接代理 4700) |
| web | 覆盖默认启动命令生成 Jetty SSL 配置后启动;JAVA_OPTIONS 显式限制 JVM 堆 256–512MB;宿主机 8137 映射容器 8443 |
| 网络 | 固定子网 10.89.63.0/24,与代理配置的 MasterServers 网段对应 |
💡 技术拓展:Compose 依赖等待条件有三种——
service_started(容器启动即算,最弱)、service_healthy(健康检查通过,适合数据库类服务)、service_completed_successfully(依赖的任务容器以 0 退出,适合一次性初始化任务)。NetXMS 部署同时用到后两种:db 用 healthcheck 保证"库进程可受理连接",init 用 completed 保证"库表结构已建好",二者缺一都可能让 server 在启动阶段报数据库错误。
四、部署步骤(从零到可用)
4.1 创建目录与配置文件
mkdir -p /opt/data/quzuo/tmp/netxms/stack/conf
cd /opt/data/quzuo/tmp/netxms/stack
随后按 3.2/3.3/3.4 节内容落盘三个文件(netxmsd.conf、nxagentd.conf、compose.yaml)。
4.2 拉取镜像
docker compose pull
实测回显(镜像已存在时校验即完成):
Image ghcr.io/netxms/web:7.0.1 Pulling
Image postgres:17 Pulling
Image ghcr.io/netxms/server:7.0.1 Pulling
Image ghcr.io/netxms/agent:7.0.1 Pulling
Image postgres:17 Pulled
Image ghcr.io/netxms/web:7.0.1 Pulled
Image ghcr.io/netxms/agent:7.0.1 Pulled
Image ghcr.io/netxms/server:7.0.1 Pulled
4.3 一键启动
docker compose up -d
Compose 会自动按依赖顺序执行:db 启动并过健康检查 → init 建库表后退出 → server/agent/web 启动。首次启动到服务端就绪约需 30–60 秒。
4.4 确认初始化结果
init 服务是幂等设计:库未初始化时执行 nxdbmgr init,已初始化时直接跳过。重复执行 docker compose up -d 不会破坏既有数据,实测日志:
docker logs netxms-7.0.1-init
DB already initialized (rc=0)
DB already initialized (rc=0)
DB already initialized (rc=0)
(回显为多次重启栈时的累积日志,每次启动 init 都会探测一遍。)
如需手工执行一次全新初始化(如换库重建),先创建空数据库,再对它执行 init,实测全程回显如下:
docker exec netxms-7.0.1-db psql -U netxms -c "CREATE DATABASE netxms_init_test;"
CREATE DATABASE
docker exec netxms-7.0.1-server nxdbmgr -c /tmp/init_test_netxmsd.conf -p q1w2e3r4 init pgsql
NetXMS Database Manager Version 7.0.1 Build 7.0-824-g44d7a0dfb5
Initializing database...
Database initialized successfully
(/tmp/init_test_netxmsd.conf 是指向新建空库的临时配置文件,内容与 3.2 节相同、仅 DBName 改为目标库名;经 docker cp 放入后用 -c 指定,用完即删。)
init 成功后验证建表数量(7.0.1 全新库在 public 模式下建 213 张表):
docker exec netxms-7.0.1-db psql -U netxms -d netxms_init_test -t -c "SELECT count(*) FROM information_schema.tables WHERE table_schema='public';"
213
⚠️
nxdbmgr init只能对空库执行;对已初始化的库重复执行会被拒绝。-p q1w2e3r4指定控制台管理账号 admin 的初始密码,不指定时随机生成并在输出中提示——务必记录。
4.5 启动状态验证
docker compose ps
实测回显:
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
netxms-7.0.1-agent ghcr.io/netxms/agent:7.0.1 "/usr/bin/nxagentd -…" agent About an hour ago Up 51 minutes 162/udp, 514/udp, 4700/tcp
netxms-7.0.1-db postgres:17 "docker-entrypoint.s…" db About an hour ago Up About an hour (healthy) 5432/tcp
netxms-7.0.1-server ghcr.io/netxms/server:7.0.1 "/usr/bin/netxmsd -c…" server About an hour ago Up 55 minutes 0.0.0.0:4701->4701/tcp, [::]:4701->4701/tcp, 4703/tcp
netxms-7.0.1-web ghcr.io/netxms/web:7.0.1 "/docker-entrypoint.…" web About an hour ago Up About an hour 8080/tcp, 0.0.0.0:8137->8443/tcp, [::]:8137->8443/tcp
服务端就绪判定看日志中的数据库驱动加载与锁定记录:
docker logs netxms-7.0.1-server 2>&1 | grep -E 'Database driver|Database lock'
2026.11.01 06:58:40.252 *I* [db.drv ] Database driver "pgsql.ddr" loaded and initialized successfully
2026.11.01 06:58:40.313 *D* [db.cpool ] Database Connection Pool initialized
2026.11.01 06:58:40.831 *D* [db.lock ] Database lock set
4.6 Web 控制台首次登录
浏览器访问 https://<宿主机IP>:8137/(自签名证书,需确认安全例外)。命令行验证入口路由:
curl -k -sL -o /dev/null -w 'FINAL %{url_effective} HTTP %{http_code}\n' https://localhost:8137/
FINAL https://localhost:8137/nxmc-light.app HTTP 200
根路径返回 302 并最终落到 Web 控制台应用入口 /nxmc-light.app(HTTP 200 即为就绪)。首次登录使用初始化时设定的管理员账号:
- 用户名:admin
- 密码:q1w2e3r4
登录后第一件事建议修改 admin 密码(控制台右上角用户菜单 → Change password),并按需创建分级运维账号。
⚠️ 若需程序化接入,控制台登录之外另有 WebAPI 令牌机制(服务端配置 WebAPI.AuthTokenMaxLifetime 默认 86400 秒控制令牌最长有效期),令牌经控制台用户菜单生成。
4.7 代理接入验证
栈内 agent 启动后会自动出现在服务端对象树(Default 区域 → node "agent")。从 server 侧对 agent 做一次指标读取以验证 NXCP 通道(agent 为 Compose 网络内服务名):
docker exec netxms-7.0.1-server nxget agent Agent.Version
7.0.1
docker exec netxms-7.0.1-server nxget agent System.Uptime
20502
返回版本号与运行秒数即证明服务端 ↔ 代理链路正常。nxget 的完整参数说明与常用指标清单见本专栏 CLI 命令篇。
五、数据持久化与备份
| 持久化目录 | 容器内路径 | 内容 | 备份方式 |
|---|---|---|---|
| ./data/db | /var/lib/postgresql/data | 全部监控数据 | pg_dump -U netxms netxms > netxms_$(date +%F).sql |
| ./data/server | /var/lib/netxms | 服务器密钥等 | 目录级拷贝 |
| ./data/agent | /var/lib/netxms | 代理本地数据 | 目录级拷贝 |
数据库逻辑备份示例(在 db 服务上执行):
docker exec netxms-7.0.1-db pg_dump -U netxms netxms > /opt/data/quzuo/tmp/netxms/netxms_backup.sql
官方还提供跨库迁移格式:nxdbmgr export <file> 导出全部配置与数据、nxdbmgr import <file> 恢复(可加 -s 跳过采集数据只迁配置),适合跨数据库引擎(如 PostgreSQL 迁 MySQL)场景。
六、等价 docker run 方式
不便使用 Compose 时,等价的五步 docker run 如下(需自建网络,效果与 compose.yaml 一致):
docker network create --subnet 10.89.63.0/24 netxms-net
docker run -d --name netxms-7.0.1-db --network netxms-net \
-e POSTGRES_USER=netxms -e POSTGRES_PASSWORD=q1w2e3r4 -e POSTGRES_DB=netxms \
-v /opt/data/quzuo/tmp/netxms/stack/data/db:/var/lib/postgresql/data \
postgres:17
docker run --rm --name netxms-7.0.1-init --network netxms-net \
-v /opt/data/quzuo/tmp/netxms/stack/conf/netxmsd.conf:/etc/netxmsd.conf \
ghcr.io/netxms/server:7.0.1 \
nxdbmgr -p q1w2e3r4 init pgsql
docker run -d --name netxms-7.0.1-server --network netxms-net --hostname server \
-v /opt/data/quzuo/tmp/netxms/stack/conf/netxmsd.conf:/etc/netxmsd.conf \
-v /opt/data/quzuo/tmp/netxms/stack/data/server:/var/lib/netxms \
-p 4701:4701 \
ghcr.io/netxms/server:7.0.1
docker run -d --name netxms-7.0.1-agent --network netxms-net --hostname agent \
-v /opt/data/quzuo/tmp/netxms/stack/conf/nxagentd.conf:/etc/nxagentd.conf \
-v /opt/data/quzuo/tmp/netxms/stack/data/agent:/var/lib/netxms \
ghcr.io/netxms/agent:7.0.1
docker run -d --name netxms-7.0.1-web --network netxms-net \
-e KEYSTORE_PASSWORD=changeit -e JAVA_OPTIONS="-Xms256m -Xmx512m" \
-p 8137:8443 \
ghcr.io/netxms/web:7.0.1 \
/bin/sh -c 'touch $JETTY_BASE/jetty-ssl.properties && echo "jetty.sslContext.keyStorePassword=$KEYSTORE_PASSWORD" > $JETTY_BASE/jetty-ssl.properties && echo "jetty.ssl.sniRequired=false" >> $JETTY_BASE/jetty-ssl.properties && echo "jetty.ssl.sniHostCheck=false" >> $JETTY_BASE/jetty-ssl.properties && exec java $JAVA_OPTIONS -jar $JETTY_HOME/start.jar $JETTY_BASE/jetty-ssl.properties'
与 Compose 版差异:docker run 方式没有依赖编排能力,需严格按"db → 等 10 秒健康 → init → server/agent/web"顺序执行;init 用
--rm即跑即销毁。
七、JVM 堆内存限制
Web 控制台是栈内唯一的 Java 进程。compose.yaml 中通过 JAVA_OPTIONS: "-Xms256m -Xmx512m" 将堆限制在 256–512MB,避免其按容器默认值吃掉过多宿主内存。修改位置即 compose.yaml 的 web 服务 environment.JAVA_OPTIONS(docker run 方式则改 -e JAVA_OPTIONS)。
修改后重启 web 服务并实测生效值:
docker compose up -d web && docker exec netxms-7.0.1-web jps -v
1 start.jar -Djava.io.tmpdir=/tmp/jetty -Xms256m -Xmx512m
100 Jps -Dapplication.home=/usr/lib/jvm/java-25-amazon-corretto -Xms8m -Djdk.module.main=jdk.jcmd
start.jar 进程的参数中出现 -Xms256m -Xmx512m 即验证生效(Jps 行为本次 jps 命令自身)。服务端 netxmsd 与代理 nxagentd 为 C++ 进程,无 JVM 参数。
八、升级与版本管理
升级到新的 7.0.x 补丁版的标准流程(以 7.0.1 → 7.0.2 为例):
- 备份数据库(第五章 pg_dump);
- 修改 compose.yaml 中 server/agent/web 三个镜像 tag 为目标版本;
- 拉取并滚动重建:
docker compose pull && docker compose up -d
- 若提示需要数据库结构升级,在 server 镜像内执行一次:
docker run --rm --network netxms-701-stack_netxms-net \
-v /opt/data/quzuo/tmp/netxms/stack/conf/netxmsd.conf:/etc/netxmsd.conf \
ghcr.io/netxms/server:7.0.2 nxdbmgr upgrade
- 回到第 3 步重启栈,并以
docker exec netxms-7.0.1-server netxmsd -v确认版本。
回滚与多版本并存:改回旧 tag 重建即可,但数据库结构只能升不能降——跨版本回滚必须恢复升级前的 pg_dump 备份。6.2 → 7.0 属大版本迁移,务必先在测试库验证 nxdbmgr upgrade 输出无错误后再动生产;7.0.1 起升级失败会返回非零退出码,可直接用于自动化流水线判断。
九、排障实录(实测沉淀)
9.1 代理端口被占用导致启动即退出
现象:agent 容器反复重启,日志出现绑定失败(宿主上重复启动了第二个 nxagentd 实例时同样触发):
2026.11.01 07:07:09.887 *E* [subagents ] Initialization of subagent "FILEMGR" (/usr/lib/x86_64-linux-gnu/netxms/filemgr.nsm) failed
2026.11.01 07:07:09.888 *I* [startup ] System hardware ID is 01B6CB61198C1584EE20BD17CE6330091A7A4833
2026.11.01 07:07:10.889 *E* [comm ] Unable to bind IPv4 socket (98 Address already in use)
2026.11.01 07:07:10.889 *E* [sa ] Unable to bind socket (98 Address already in use)
2026.11.01 07:07:10.890 *E* [comm ] Cannot bind at least one socket, terminating agent process
定位:98 Address already in use 表明 4700 端口(NXCP 代理监听口)已被占用——通常是同机残留了另一个 nxagentd 进程(例如旧栈未清理)。处理:确认没有重复实例后重新启动该服务(docker compose up -d --force-recreate agent);裸机部署则 pgrep -a nxagentd 找到残留进程后终止。另注意首行 FILEMGR 子代理加载失败是独立问题,见 9.2。
9.2 子代理模块不存在导致警告
现象:agent 日志首启出现 Initialization of subagent "FILEMGR" (/usr/lib/x86_64-linux-gnu/netxms/filemgr.nsm) failed。
定位:nxagentd.conf 中配置了 SubAgent=filemgr,但官方 agent 镜像未包含 filemgr.nsm 模块文件。该警告不阻断代理运行(仅该子代理功能缺失),但会污染日志。处理:不需要文件管理功能的部署直接删除 nxagentd.conf 中 SubAgent=filemgr 一行后重建 agent 服务;确需该功能时换用包含对应模块的发行包。
9.3 控制台命令行登录报 Authentication failed (server error 61)
现象:从 server 侧进入交互控制台执行命令时全部报 Authentication failed (server error 61: Internal error),实测回显:
=== show objects ===
Authentication failed (server error 61: Internal error)
=== get DBLockStatus ===
Authentication failed (server error 61: Internal error)
定位:该错误在本地管理账号被锁定(多次密码错误触发 IntruderLockout)或凭据状态异常时出现。处理:用数据库管理工具强制解锁账号后恢复正常,实测解锁后同样两条命令均成功:
=== show objects ===
Object ID 1 "Entire Network"
Class=Network Status=NORMAL IsModified=0 IsDeleted=0
Parents: <>
Children: <4>
Last change.........: 01.Nov.2026 06:58:41
=== get DBLockStatus ===
DBLockStatus = 10.89.63.3
解锁操作使用数据库管理工具的 unlock-user 子命令(用法与回显见本专栏 CLI 命令篇)。
9.4 重复 up -d 触发重复初始化的担忧(实为幂等)
现象:担心每次 docker compose up -d 都会重新执行建库破坏数据。
定位与结论:init 服务的入口脚本先探测 DBLockStatus——已初始化的库返回 0,脚本打印 DB already initialized (rc=0) 后直接退出(见 4.4 节实测日志),幂等成立,可放心反复重建栈。
十、卸载与清理
docker compose down # 停止并删除容器与网络(保留数据目录)
docker compose down -v # 额外清理命名卷(本文数据在 bind mount,不受影响)
rm -rf /opt/data/quzuo/tmp/netxms/stack/data # 彻底清除数据(不可恢复,先确认备份)
docker rmi ghcr.io/netxms/server:7.0.1 ghcr.io/netxms/agent:7.0.1 ghcr.io/netxms/web:7.0.1
十一、参考链接
- 官方镜像与发行说明:https://github.com/netxms/netxms/releases (release-7.0.1,查询日期 2026-11-01)
- 官方容器仓库:https://ghcr.io/netxms (server/agent/web 三镜像)
- 官方文档站:https://www.netxms.org/documentation/