node.js - 由于缺少节点模块,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 崩溃而无法找到模块?
解决方案
你的操作系统是什么:windows (wsl)/linux/macOs?
尝试运行以下命令: docker run -p 8160:3016 -d -v $(pwd):/app node-docker-img
我已将“$(pwd)”更改为 $(pwd)。
推荐阅读
- ecmascript-6 - 无法运行 Mocha 测试,因为返回超出函数范围?
- laravel - 为什么 Whoops 有时在我的 Laravel 上看起来不一样?
- python - python烧瓶json响应嵌入url用于可点击重定向
- mysql - MySQL 5.6 ExtractValue XPath 连接
- node.js - 使用 Promisify(https) 的 POST 语法
- java - 模拟服务/控制器时,Mockito 返回一个空指针
- javascript - 在 d3 中使用多个复选框类别进行交叉过滤
- python - 以编程方式配置 EC2 实例
- javascript - 如何改变如果用户输入的值小于指定值,则将值标记为默认值?
- raspberry-pi - 使用 gstreamer 启动 webrtc 管道时出现段错误