【前端+docker】NMS 容器启动失败?可能只是缺少一个 `/etc/nms/nacos` 文件

📅 2026/8/6 21:50:50
【前端+docker】NMS 容器启动失败?可能只是缺少一个 `/etc/nms/nacos` 文件
NMS 容器服务启动失败 — 问题排查与解决总结一句话总结新版 NMS 强制要求/etc/nms/nacos文件存在且内容不能带换行符。用printf nacos:8848 /etc/nms/nacos创建该文件后重启容器即可解决。引言升级 NMS网络管理系统Deb 包后是否遇到过容器反复重启、uptime始终归零、外部访问直接Connection reset的情况表面 Supervisor 显示RUNNING实则进程在“无限崩溃重启”的死循环里打转——这背后往往是一个被忽略的配置文件在作祟。本文还原一次完整的现场排查过程从容器的“假活”表象开始到定位隐藏的业务日志、解析致命错误最终揪出配置文件缺失和换行符格式异常两个根因并给出直接在宿主机上一键修复的操作步骤。文末附有常用排查命令速查表方便后续遇到类似问题时快速比对。跟着排查路径走一遍下次再碰到容器“起不来”的情况便能有章可循。目录问题现象排查路径按顺序第 1 步确认服务是否真的在运行第 2 步找到真正的业务日志第 3 步分析日志中的致命错误FLT第 4 步对比正常运行的容器第 5 步检查 Deb 包内容根本原因原因 1配置文件缺失原因 2配置文件格式错误换行符解决步骤一键修复常用排查命令速查表经验教训一、问题现象现象描述外部访问http://宿主机IP:8680无法访问返回Connection reset容器内测试curl http://127.0.0.1:8080返回Connection refused服务状态supervisorctl status显示restserver、neapp等服务反复重启uptime永远是0:00:00端口监听ss -lntp二、排查路径按顺序下面是本次排查的完整决策路径从现象到根因一目了然uptime ! 0 且 pid 稳定uptime 0 且 pid 不断变化open /etc/nms/nacos: no such file or directorystrconv.ParseUint: parsing ... invalid syntax服务不可用外网 Connection reset容器内 curl Connection refusedsupervisorctl uptime 一直 0:00:00supervisorctl status可能为其他故障跳出本文范围进程“假活”进入 Step 2找到真正的业务日志find /var/log -name nms_*.log -mmin -10tail 业务日志定位 FLT 致命错误日志中的 FLT 信息根因 1配置文件缺失根因 2配置文件格式错误换行符第 1 步确认服务是否真的在运行supervisorctl status关键点如果uptime一直是0:00:00且pid不断变化说明进程在无限崩溃重启不是真的在运行。第 2 步找到真正的业务日志NMS 的日志不在Supervisor 默认路径而是在/var/log/nms_neapp.log /var/log/nms_ncappSuper.log /var/log/nms_alarmapp.log /var/log/nms_restserver.log查找方法find/var/log-namenms_*.log-mmin-10第 3 步分析日志中的致命错误FLTtail-n20/var/log/nms_neapp.log第 4 步对比正常运行的容器# 查看正常容器的配置和环境变量dockerexecyork-nms-1env|grep-iEnacos|db|redisdockerexecyork-nms-1ls-la/etc/nms/第 5 步检查 Deb 包内容确认官方是否自带该文件dpkg-deb-c/root/nms_1.0.0.1_20260804.deb|grep-iEnacos|/etc/nms三、根本原因原因 1配置文件缺失[FLT] open /etc/nms/nacos: no such file or directory新版 Deb 包20260804强制要求/etc/nms/nacos文件存在找不到就直接退出。旧版 Deb 包20260724有回退机制找不到文件会读取环境变量NACOSnacos:8848。该文件本应由 Deb 包的安装脚本postinst自动生成但升级过程中丢失了。原因 2配置文件格式错误换行符[FLT] strconv.ParseUint: parsing 8848\n: invalid syntax使用echo nacos:8848 /etc/nms/nacos创建文件时末尾会自动追加换行符\n。Go 程序的ParseUint函数严格拒绝换行符导致解析失败。四、解决步骤一键修复在宿主机上执行# 1. 创建配置文件printf 不会追加换行符dockerexeclcan-nms-1sh-cprintf nacos:8848 /etc/nms/nacos# 2. 验证文件内容必须紧挨着提示符没有换行dockerexeclcan-nms-1cat/etc/nms/nacos# 正确输出nacos:8848root...内容和提示符之间无换行# 3. 重启容器dockerrestart lcan-nms-1# 4. 等待 10 秒后验证sleep10dockerexeclcan-nms-1 supervisorctl status restserver neapp成功标志uptime持续增加如0:00:15不再是0:00:00。五、常用排查命令速查表场景命令查看服务状态supervisorctl status查看业务日志tail -n 50 /var/log/nms_neapp.log查找所有 NMS 日志find /var/log -name nms_*.log查看系统日志grep restserver /var/log/syslog | tail -n 20检查端口监听ss -lntp | grep 8080容器内测试连通性curl -I http://nacos:8848/nacos/查看环境变量docker exec 容器名 env | grep -i nacos查看 Deb 包内容dpkg-deb -c 包名.deb | grep 关键字追踪程序系统调用strace -f -e tracefile -o /tmp/trace.log 程序名对比正常容器配置docker exec 正常容器名 cat /etc/supervisor/conf.d/10-supernms.conf六、经验教训uptime 0:00:00是假活Supervisor 显示RUNNING不代表服务正常必须看uptime是否持续增长。日志不在默认位置NMS 的业务日志在/var/log/nms_*.log不在 Supervisor 的/var/log/supervisor/下。版本差异要警惕升级 Deb 包后新版可能改变配置读取逻辑从可选变为强制旧容器能跑不代表新容器也能跑。写配置文件用printfecho会追加换行符Go 程序解析端口/数字时会报错。写纯配置文件一律用printf。对比正常环境是最快路径遇到起不来的服务第一时间去正常运行的容器里对比配置、环境变量、文件目录。一句话总结新版 NMS 强制要求/etc/nms/nacos文件存在且内容不能带换行符。用printf nacos:8848 /etc/nms/nacos创建该文件后重启容器即可解决。