首页 > 解决方案 > 由于缺少节点模块,Docker 容器仅在绑定卷时崩溃

问题描述

我想将我的主机中的卷绑定到 docker 容器,以便在主机中所做的更改反映在容器中。

我有一个 Node.js 应用程序,其结构如下:

...
publc/
  |_index.html
  |_ ...
src/
  |_app.js
  |_ ...
package.json
...

Dockerfile:

FROM node:14

# app directory
WORKDIR /app

# Install app dependencies
COPY package*.json ./

RUN npm install

# bundle app source

COPY . .

EXPOSE 3016
CMD ["node", "src/app.js"]

创建图像(在项目目录中):

$ docker build . -t node-docker-img

运行 Docker 容器(在项目目录中):

docker run -p 8160:3016 -d -v "$(pwd)":/app node-docker-img

Docker 容器立即退出。查看 Docker 日志时,我看到:

nternal/modules/cjs/loader.js:883
  throw err;
  ^

Error: Cannot find module 'express'
Require stack:
- /app/src/app.js
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
    at Function.Module._load (internal/modules/cjs/loader.js:725:27)
    at Module.require (internal/modules/cjs/loader.js:952:19)
    at require (internal/modules/cjs/helpers.js:88:18)
    at Object.<anonymous> (/app/src/app.js:1:17)
    at Module._compile (internal/modules/cjs/loader.js:1063:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
    at Module.load (internal/modules/cjs/loader.js:928:32)
    at Function.Module._load (internal/modules/cjs/loader.js:769:14)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {
  code: 'MODULE_NOT_FOUND',
  requireStack: [ '/app/src/app.js' ]
}

如果我在不绑定卷的情况下运行 docker 容器,则该应用程序可以正常工作。

docker run -p 8160:3016 -d node-docker-img

如何将我的主机中的卷绑定到 Docker 容器,以便将主机中所做的更改传播到容器,同时避免 Docker 崩溃而无法找到模块?

标签: node.jsdocker

解决方案


你的操作系统是什么:windows (wsl)/linux/macOs?

尝试运行以下命令: docker run -p 8160:3016 -d -v $(pwd):/app node-docker-img

我已将“$(pwd)”更改为 $(pwd)。


推荐阅读