由于绑定安装而无法在Dockerfile和docker-compose中找到节点模块

史蒂文·索卡(Steven Soekha)

所以我有这个NodeJS Express应用程序。这是代码的工作原理:

Docker文件

FROM node:10.16-alpine
WORKDIR /app
COPY . /app
RUN npm install
CMD ["npm", "start"]

docker-compose.yml

version: "3.7"

services:
  node-express:
    build: .
    ports: 
      - 80:3000

但是对于此应用程序,我想查看实时代码更改。因此,我知道可以在其中使用Bind Mounts,但是一旦我添加了卷,就这样:

docker-compose.yml

version: "3.7"

services:
  node-express:
    build: .
    volumes: 
      - .:/app
    ports: 
      - 80:3000

看来node_modules不再位于“ app”目录中。如何解决此问题?我已经为此工作了四个小时,但仍然找不到错误!

错误

HijackManiac:webserver hijackmaniac$ docker-compose up
Creating network "webserver_default" with the default driver
Building node-express
Step 1/5 : FROM node:10.16-alpine
 ---> a298c79121d9
Step 2/5 : WORKDIR /app
 ---> Running in 9b99df0f54ba
Removing intermediate container 9b99df0f54ba
 ---> 48f9b606b32d
Step 3/5 : COPY . /app
 ---> 1f29dc735dc7
Step 4/5 : RUN npm install
 ---> Running in 81225f56a9fd
npm WARN [email protected] No description
npm WARN [email protected] No repository field.

added 106 packages from 130 contributors and audited 202 packages in 3.344s
found 0 vulnerabilities

Removing intermediate container 81225f56a9fd
 ---> 2985dc77bc12
Step 5/5 : CMD ["npm", "start"]
 ---> Running in 271ab42687ce
Removing intermediate container 271ab42687ce
 ---> 38a39768792e

Successfully built 38a39768792e
Successfully tagged webserver_node-express:latest
WARNING: Image for service node-express was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.
Creating webserver_node-express_1 ... done
Attaching to webserver_node-express_1
node-express_1  | 
node-express_1  | > [email protected] start /app
node-express_1  | > node src/app.js
node-express_1  | 
node-express_1  | internal/modules/cjs/loader.js:638
node-express_1  |     throw err;
node-express_1  |     ^
node-express_1  | 
node-express_1  | Error: Cannot find module 'express'
node-express_1  |     at Function.Module._resolveFilename (internal/modules/cjs/loader.js:636:15)
node-express_1  |     at Function.Module._load (internal/modules/cjs/loader.js:562:25)
node-express_1  |     at Module.require (internal/modules/cjs/loader.js:690:17)
node-express_1  |     at require (internal/modules/cjs/helpers.js:25:18)
node-express_1  |     at Object.<anonymous> (/app/src/app.js:2:17)
node-express_1  |     at Module._compile (internal/modules/cjs/loader.js:776:30)
node-express_1  |     at Object.Module._extensions..js (internal/modules/cjs/loader.js:787:10)
node-express_1  |     at Module.load (internal/modules/cjs/loader.js:653:32)
node-express_1  |     at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
node-express_1  |     at Function.Module._load (internal/modules/cjs/loader.js:585:3)
node-express_1  | npm ERR! code ELIFECYCLE
node-express_1  | npm ERR! errno 1
node-express_1  | npm ERR! [email protected] start: `node src/app.js`
node-express_1  | npm ERR! Exit status 1
node-express_1  | npm ERR! 
node-express_1  | npm ERR! Failed at the [email protected] start script.
node-express_1  | npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
node-express_1  | npm WARN Local package.json exists, but node_modules missing, did you mean to install?
node-express_1  | 
node-express_1  | npm ERR! A complete log of this run can be found in:
node-express_1  | npm ERR!     /root/.npm/_logs/2019-06-04T23_55_20_327Z-debug.log
webserver_node-express_1 exited with code 1

查看工作树: 在此处输入图片说明

在将卷添加到docker-compose.yml中之前,容器已成功运行。结构如下:在此处输入图片说明

肌氨酸

您需要修改项目结构,以将每个可编辑的代码移动到某个文件夹中(例如)src,或者更新Dockerfile以将node_modules目录移至更高位置。

众所周知,当Node在当前目录中找不到node_modules时,它将开始在父目录中寻找它,因此我们可以利用它。

与此类似的Dockerfile将解决您的问题。

FROM node:10.16-alpine
WORKDIR /node
COPY package.json package-lock.json ./

RUN npm install
WORKDIR /node/app
COPY . .

CMD ["npm", "start"]

请确保也对docker-compose.yml进行了适当的更改(目录结构已更改)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

docker-compose绑定安装的目录对于Dockerfile似乎不可见

docker-compose:为绑定安装和托管安装定义安装

在docker-compose中进行本地绑定安装

Docker-Compose NGINX / uWSGI / Flask绑定安装问题

节点无法找到模块(即使已安装)

Docker容器无法找到更新的节点模块

Jpype导入无法在jar中找到模块

gunicorn:无法在模块中找到属性“app”

Jest 无法从测试文件中找到模块

Javascript无法在单独的目录中找到模块

Python/Anaconda 无法在 conda 环境中找到已安装的模块

木偶无法从已安装的模块apache中找到类

在模块''中找到''命令,但无法加载该模块

在模块中找到命令,但无法加载模块

节点应用无法找到全局模块Bitcore

打包的 Electron App 无法找到节点模块

全局安装npm模块...然后节点无法找到它

如何让 Hazelcast 管理中心在 docker 中找到它的节点?

由于缺少内核模块而无法安装VirtualBox

Docker Compose:哪种语法产生绑定安装,哪个产生卷

如何在VS代码中找到新安装的python模块?

EJB模块无法从依赖关系中找到接口

无法从“ setupTests.ts”中找到模块“酶”

无法从 express/npm 模块中找到静态资产

Maven无法从其他模块中找到测试超类

为什么rust无法在子模块中找到功能?

早午餐:无法从“ /”中找到模块“初始化”

无法从 .jar 文件创建的 Android 模块中找到类

无法从“ ReactFiberTreeReflection.js”中找到模块“ react / lib / ReactCurrentOwner”