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

Docker容器运行Node.js应用时无法找到helper模块求助

问题描述

在Windows系统的Docker中使用Linux容器对名为Hub的Node.js微服务进行容器化,该服务依赖本地公共模块authentication和helper,且authentication也依赖helper。构建过程无报错,但运行时提示找不到helper模块,容器内文件已确认正确复制,调整Dockerfile的WORKDIR也无效,直接在本地Node.js环境运行应用完全正常。

错误信息

hub-1  | Error: Cannot find module 'helper'
hub-1  | Require stack:
hub-1  | - /src/apps/Common/Authentication/index.js
hub-1  | - /src/apps/Hub/WS/eventhandler.js
hub-1  | - /src/apps/Hub/WS/initws.js
hub-1  | - /src/apps/Hub/index.js
hub-1  |   requireStack: [
hub-1  |     '/src/apps/Common/Authentication/index.js',
hub-1  |     '/src/apps/Hub/WS/eventhandler.js',
hub-1  |     '/src/apps/Hub/WS/initws.js',
hub-1  |     '/src/apps/Hub/index.js'
hub-1  |   ]
hub-1  | }

目录结构

Main Folder
|- Dockerfile_Hub
|- compose.yaml
|- apps
  |- Hub
  |- ...其他服务
  |- Common
    |- Authentication
    |- Helper 
    |- ...其他公共模块

package.json配置

Hub的package.json

{
  "name": "hub",
  "version": "1.0.0",
  "description": "Hub Service",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "authentication": "file:../Common/Authentication",
    "axios": "^1.6.8",
    "config": "file:../Common/Config",
    "crypto": "^1.0.1",
    "express": "^4.19.1",
    "express-session": "^1.18.0",
    "fs": "^0.0.1-security",
    "helper": "file:../Common/Helper",
    "http": "^0.0.1-security",
    "jsonwebtoken": "^9.0.2",
    "keycloak-connect": "^24.0.2",
    "logger": "file:../Common/Logger",
    "node-jose": "^2.2.0",
    "socket.io": "^4.7.5",
    "swagger-jsdoc": "^6.2.8",
    "swagger-ui-express": "^5.0.0"
  }
}

Authentication的package.json

{
  "name": "authentication",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "config": "file:../Config",
    "helper": "file:../Helper",
    "jsonwebtoken": "^9.0.2",
    "jswt": "^1.4.4",
    "logger": "file:../Logger"
  }
}

Dockerfile

ARG NODE_VERSION=20.12.0

FROM node:${NODE_VERSION}-alpine

ENV NODE_ENV development

WORKDIR /usr/src/app

RUN mkdir -p /src
COPY ./apps/Common /src/apps/Common
COPY ./apps/Hub /src/apps/Hub

# Download dependencies as a separate step to take advantage of Docker's caching.
# Leverage a cache mount to /root/.npm to speed up subsequent builds.
# Leverage a bind mounts to package.json and package-lock.json to avoid having to copy them into
# into this layer.
RUN --mount=type=bind,source=/apps/Hub/package.json,target=package.json \
    --mount=type=bind,source=/apps/Hub/package-lock.json,target=package-lock.json \
    --mount=type=cache,target=/root/.npm \
    npm ci --omit=dev


RUN cd /src/apps/Hub && npm install

# Run the application as a non-root user.
USER node

# Expose the port that the application listens on.
EXPOSE 8000

# Run the application.
CMD node /src/apps/Hub/index.js

Docker Compose配置

version: "3"

services:
  hub:
    build:
      context: .
      dockerfile: Dockerfile_Hub
    environment:
      NODE_ENV: development
      APP_PATH: /src/apps/Hub
      PINO_LOG_LEVEL: debug
    ports:
      - 3000:3000

构建及运行日志

[+] Building 0.0s (0/0)  docker:default
[+] Building 0.0s (0/0)  docker:defaultr reading preface from client //./pipe/docker_engine: file has already been closed
[+] Building 3.2s (15/15) FINISHED                                                                                                                
 => [hub internal] load build definition from Dockerfile_Hub                                                                                        
 => => transferring dockerfile: 1.38kB                                                                                                              
 => [hub] resolve image config for docker.io/docker/dockerfile:1                                                                                    
 => CACHED [hub] docker-image://docker.io/docker/dockerfile:1@sha256:a57df69d0ea827fb7266491f2813635de6f17269be881f696fbfdf2d83dda33e                
 => [hub internal] load metadata for docker.io/library/node:20.12.0-alpine                                                                           
 => [hub internal] load .dockerignore                                                                                                               
 => => transferring context: 2B                                                                                                                     
 => [hub stage-0 1/8] FROM docker.io/library/node:20.12.0-alpine@sha256:ef3f47741e161900ddd07addcaca7e76534a9205e4cd73b2ed091ba339004a75             
 => [hub internal] load build context                                                                                                               
 => => transferring context: 478.86kB                                                                                                               
 => CACHED [hub stage-0 2/8] WORKDIR /usr/src/app                                                                                                   
 => CACHED [hub stage-0 3/8] RUN mkdir -p /src                                                                                                      
 => CACHED [hub stage-0 4/8] COPY ./apps/Common /src/apps/Common                                                                                    
 => CACHED [hub stage-0 5/8] COPY ./apps/Hub /src/apps/Hub                                                                                          
 => CACHED [hub stage-0 6/8] RUN --mount=type=bind,source=/apps/Hub/package.json,target=package.json     --mount=type=bind,source=/apps/Hub/package-
 => CACHED [hub stage-0 7/8] RUN cd /src/apps/Hub && npm install                                                                                    
 => [hub stage-0 8/8] WORKDIR /src/apps/Hub                                                                                                         
 => [hub] exporting to image                                                                                                                        
 => => exporting layers                                                                                                                             
 => => writing image sha256:4f2ce3b43d06485ec72da1c107df361e6b0a11d44785beea3baff85ff60170a3                                                          
 => => naming to docker.io/library/finslice-hub                                                                                                       
[+] Running 2/2
 ✔ Container crazy_rosalind  Removed
 ✔ Container finslice-hub-1  Recreated
Attaching to hub-1
hub-1  | node:internal/modules/cjs/loader:1146
hub-1  |   throw err;
hub-1  |   ^
hub-1  | 
hub-1  | Error: Cannot find module 'helper'
hub-1  | Require stack:
hub-1  | - /src/apps/Common/Authentication/index.js
hub-1  | - /src/apps/Hub/WS/eventhandler.js
hub-1  | - /src/apps/Hub/WS/initws.js
hub-1  | - /src/apps/Hub/index.js
hub-1  |   requireStack: [
hub-1  |     '/src/apps/Common/Authentication/index.js',
hub-1  |     '/src/apps/Hub/WS/eventhandler.js',
hub-1  |     '/src/apps/Hub/WS/initws.js',
hub-1  |     '/src/apps/Hub/index.js'
hub-1  |   ]
hub-1  | }
hub-1  |
hub-1  | Node.js v20.12.0
hub-1 exited with code 1

已尝试的无效操作

  • 调整Dockerfile最后两行如下,问题依旧:
    WORKDIR /src/apps/Hub
    CMD node index.js
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 18:52:34