资讯详情

NocoBase CLI 中 nb app stop 命令详解:停止本地与 Docker 应用及内置数据库容器

📅 2026/9/13 2:30:48 | 华诺云谱 👁 阅读
NocoBase CLI 中 nb app stop 命令详解:停止本地与 Docker 应用及内置数据库容器
NocoBase CLI 中 nb app stop 命令详解停止本地与 Docker 应用及内置数据库容器【免费下载链接】nocobaseNocoBase is an open-source AI no-code platform for building business systems fast. Instead of generating everything from scratch, AI works on top of production-proven infrastructure and a WYSIWYG no-code interface, so you get both speed and reliability.项目地址: https://gitcode.com/GitHub_Trending/no/nocobase本文围绕 NocoBase CLInb的nb app stop命令展开说明它在 npm/Git 本地安装与 Docker 安装两种场景下分别如何停止应用、--with-db如何清理 CLI 托管的内置数据库容器并结合 stop.ts 等源码拆解跨 env 确认、容器命名与底层停止动作的完整实现链路。读完后你可以安全地停止任意 env 的 NocoBase 运行时并理解每个参数背后的实际行为与限制。命令定位与基本用法nb app stop用于停止指定 env 的 NocoBase 应用。不同安装来源的停止动作不同npm / Git 安装本地进程停止本地应用进程底层是向项目根目录派发pm2 killDocker 安装直接移除remove已保存的应用容器而不是仅仅暂停。用法如下nb app stop [flags]参数说明参数类型说明--env,-estring要停止的 CLI env 名称省略时使用当前 env--yes,-yboolean当显式--env指向的 env 与当前 env 不一致时跳过交互确认--with-dbboolean在存在 CLI 托管内置数据库时一并清理数据库容器--verboseboolean显示底层本地或 Docker 命令输出从 stop.ts 的flags定义还可以看到一个隐藏的兼容参数--force-f源码中标记为hidden: true它与--yes等效都能跳过跨 env 确认但不出现在帮助文档中。日常使用无需关心它。示例nb app stop nb app stop --env local nb app stop --env local --with-db nb app stop --env local --verbose nb app stop --env local-docker跨 env 操作的安全确认机制只有在你显式传入--env时CLI 才会检查它是否与当前 env 一致。这一逻辑在源码中分两条路径处理见 stop.ts 的run()与 env-guard.ts交互式终端通过hasExplicitEnvSelection()检测 argv 中是否真实出现了--env/-e若请求的 env 与当前 env 不同会弹出确认提示默认答案为“否”--yes可跳过。拒绝确认则直接中止不执行任何停止动作非交互终端或 AI agent 场景无法弹确认框此时如果--env指向与当前 env 不同的环境且未追加--yes命令会直接报错拒绝错误信息明确提示追加--yes或先执行nb env use name再重试。这种设计保证了自动化脚本和 Agent 不会误停到“当前正在操作的别的 env”同时交互式用户仍有人工确认兜底。运行时的解析为什么有的 env 停不了命令执行第一步是调用resolveManagedAppRuntime(requestedEnv)定义在 app-runtime.ts从 CLI 的 env 配置中解析出运行时类型。该函数返回一个判别联合ManagedAppRuntime共四种kindkind含义nb app stop的行为localnpm/git/本地源码安装在项目根目录执行pm2 kill停止进程dockerDocker 安装移除保存的应用容器http仅保存了 API 连接的远程 env报错本机没有可停止的本地/Docker 运行时需到服务器本机停止ssh预留的 SSH env报错SSH 支持已预留但尚未实现也就是说这个命令只能操作当前机器上的 local 或 Docker 运行时如果某个 env 只是一个 HTTP API 连接nb app stop无法替你远程停机。另外若 env 根本不存在命令会给出带修复建议的错误Env name is not configured in this workspace. If you want to create a new NocoBase AI environment, run nb init --ui --env name first.本地运行时的停止实现npm / Git 安装对kind local的 env停止动作由stopLocalRuntimeWithFallback()完成通过runLocalNocoBaseCommand(runtime, [pm2, kill], ...)向 env 的projectRoot即 NocoBase 项目根目录派发pm2 kill并注入生产环境标识managedAppLifecycleEnvVars()返回APP_ENVproduction、NODE_ENVproduction见 app-runtime.ts如果该子命令本身就起不来例如项目目录已被删除、依赖的旧版nocobase-v1不存在shouldIgnoreLocalStopError()会识别几类“应用已经不在”的错误信息并视为停止成功而不是向用户报错message.includes(spawn nocobase-v1 ENOENT) || message.includes(The specified --cwd does not exist:) || message.includes(The specified --cwd is not a directory:) || message.includes(Couldnt find a NocoBase source project from --cwd:)其余错误则会走formatStopFailure()输出失败原因并提示检查本地应用或 Docker 运行时是否仍可用。测试用例 app-management-commands.test.ts 中nb app start前台模式检测到应用已在运行时会提示“Usenb app stop --env localbefore starting it again in the foreground”印证了stop是本地前台/后台切换流程中的标准前置步骤。Docker 运行时的停止实现容器移除对kind docker的 env停止即移除容器调用 shared.ts 中的removeDockerContainerIfExists()先执行docker container inspect containerName判断容器是否存在若报 “No such container/object” 则返回missingCLI 输出 “No Docker app container found”不算失败操作幂等存在则执行docker rm -f containerName强制删除返回removed。容器名不是随意生成的而是由 app-runtime.ts 中的buildDockerAppContainerName(envName, containerPrefix)构造{prefix}-{envName}-app其中prefix来自 CLI 配置docker.container-prefix缺省为nb-当前目录名defaultWorkspaceName()即nb- 工作目录 basename最终再经sanitizeDockerResourceName()清洗为小写字母、数字、_、.、-。例如 env 名为local-docker、工作目录为demo时容器名形如nb-demo-local-docker-app。--with-db一并清理内置数据库容器--with-db只在存在CLI 托管的内置数据库容器时才会真正生效源码中的判断链是停止完应用运行时后若未传--with-db直接返回仅local/docker两种 kind 会进入数据库清理分支调用 shared.ts 的builtinDbContainerName(runtime)当 env 配置中builtinDb为真时按buildDockerDbContainerName(envName, dbDialect, containerPrefix)生成数据库容器名格式为{prefix}-{envName}-{dialect}dialect取 env 配置dbDialect缺省为postgres若 env 不使用内置数据库例如配置了外部数据库则打印提示 “does not use a CLI-managed built-in database. Only the app runtime was stopped.” 并安全返回——外部数据库资源不会被触碰同样通过removeDockerContainerIfExists()幂等地移除数据库容器。因此--with-db的适用场景很明确你不仅想停掉应用还想把本机上的内置数据库运行时一并关掉例如释放内存/磁盘 IO。日常只想停应用本身时不带该参数即可。与 nb app down 的关系仓库测试 app-management-commands.test.ts 中有一条用例down routes to app stop with built-in db cleanup and shows a deprecation warning表明旧命令nb app down已废弃实际会被转发为nb app stop --env env --verbose --with-db --yes并输出警告nb app down is deprecated. Use nb app stop --with-db instead.。如果你看到老教程里的nb app down直接替换为nb app stop --with-db即可。故障排查建议Docker 场景若nb app stop --env env失败可先用docker ps -a | grep env确认容器状态--verbose可显示底层docker命令的原始输出本地场景确认 env 的projectRoot项目根目录仍然存在若目录已删停止会因“ENOENT/cwd 不存在”被识别为成功而非报错若pm2 kill报其他错误用--verbose查看原始输出跨 env 拒绝错误信息会明确给出两种解决路径——本次执行追加--yes或先nb env use name切换当前 env 再重试。相关命令nb app start启动指定 env 的 NocoBase 应用nb app restart重启应用内部等价于 stop startnb env remove彻底移除 env 配置与“仅停止运行时”的nb app stop区分使用。【免费下载链接】nocobaseNocoBase is an open-source AI no-code platform for building business systems fast. Instead of generating everything from scratch, AI works on top of production-proven infrastructure and a WYSIWYG no-code interface, so you get both speed and reliability.项目地址: https://gitcode.com/GitHub_Trending/no/nocobase创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。