You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js项目Docker Compose运行时找不到swagger-ui-express模块

问题描述

我在app.js中引入swagger-ui-express用于项目,代码如下:

const swaggerUI = require("swagger-ui-express");
const YAML = require("yamljs");
const swaggerDocument = YAML.load("./swagger.yaml");

app.use(
  "/swagger",
  swaggerUI.serve, swaggerUI.setup(swaggerDocument)
);

但使用Docker Compose运行项目时,出现如下错误:

app_back_end  | [nodemon] 1.19.4
app_back_end  | [nodemon] to restart at any time, enter `rs`
app_back_end  | [nodemon] watching dir(s): *.*
app_back_end  | [nodemon] watching extensions: js,mjs,json
app_back_end  | [nodemon] starting `node --inspect=0.0.0.0 ./bin/www`
app_back_end  | Debugger listening on ws://0.0.0.0:9229/0442f111-2e23-40db-a162-d67ed53acbc4
app_back_end  | For help, see: https://nodejs.org/en/docs/inspector
app_back_end  | internal/modules/cjs/loader.js:834
app_back_end  |   throw err;
app_back_end  |   ^
app_back_end  | 
app_back_end  | Error: Cannot find module 'swagger-ui-express'
app_back_end  | Require stack:
app_back_end  | - /app/app.js
app_back_end  | - /app/bin/www
app_back_end  |     at Function.Module._resolveFilename (internal/modules/cjs/loader.js:831:15)
app_back_end  |     at Function.Module._resolveFilename (/app/node_modules/module-alias/index.js:49:29)
app_back_end  |     at Function.Module._load (internal/modules/cjs/loader.js:687:27)
app_back_end  |     at Module.require (internal/modules/cjs/loader.js:903:19)
app_back_end  |     at require (internal/modules/cjs/helpers.js:74:18)
app_back_end  |     at Object.<anonymous> (/app/app.js:81:19)
app_back_end  |     at Module._compile (internal/modules/cjs/loader.js:1015:30)
app_back_end  |     at Object.Module._extensions..js (internal/modules/cjs/loader.js:1035:10)
app_back_end  |     at Module.load (internal/modules/cjs/loader.js:879:32)
app_back_end  |     at Function.Module._load (internal/modules/cjs/loader.js:724:14)
app_back_end  |     at Module.require (internal/modules/cjs/loader.js:903:19)
app_back_end  |     at require (internal/modules/cjs/helpers.js:74:18)
app_back_end  |     at Object.<anonymous> (/app/bin/www:7:11)
app_back_end  |     at Module._compile (internal/modules/cjs/loader.js:1015:30)
app_back_end  |     at Object.Module._extensions..js (internal/modules/cjs/loader.js:1035:10)
app_back_end  |     at Module.load (internal/modules/cjs/loader.js:879:32)
app_back_end  |     at Function.Module._load (internal/modules/cjs/loader.js:724:14)
app_back_end  |     at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:60:12)
app_back_end  |     at internal/main/run_main_module.js:17:47 {
app_back_end  |   code: 'MODULE_NOT_FOUND',
app_back_end  |   requireStack: [ '/app/app.js', '/app/bin/www' ]
app_back_end  | }
app_back_end  | [nodemon] app crashed - waiting for file changes before starting...

我已通过npm下载swagger-ui-express模块,但仍出现此错误,请问如何解决?

解决方案
  • 检查Dockerfile构建步骤:确保Dockerfile中包含依赖安装命令,比如RUN npm install或RUN yarn install。本地安装的依赖不会自动同步到容器,必须在镜像构建阶段完成安装。
  • 排查.dockerignore配置:如果.dockerignore文件中包含node_modules,构建镜像时会忽略该目录,导致容器内缺少依赖。可临时注释该行,或确保构建时重新安装依赖。
  • 调整Docker Compose卷挂载:若使用本地目录挂载到容器,本地node_modules可能与容器环境(如Linux)不兼容。可将容器内的node_modules排除在挂载之外,在docker-compose.yml中配置:
    volumes:
      - .:/app
      - /app/node_modules
    
    这样容器会保留自身的node_modules目录,避免被本地文件覆盖。
  • 重新构建镜像:修改Dockerfile或依赖后,执行docker-compose build重新构建镜像,再启动服务,避免使用旧的镜像缓存。
  • 验证容器内依赖状态:进入容器检查依赖是否存在,执行docker exec -it <容器名称> bash,查看/app/node_modules下是否有swagger-ui-express和yamljs。若缺失,可在容器内临时执行npm install swagger-ui-express yamljs测试,再排查构建流程问题。

内容的提问来源于stack exchange,提问作者roeygol

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 17:11:11