Node.js   发布时间:2022-04-24  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了node.js – npm install成功后,卷中不存在node_modules:node_modules大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个应用程序与以下服务:

> web / – 持有并在端口5000上运行python 3 flask web服务器。使用sqlite3
> worker / – 有一个index.js文件,它是队列的工作者。 Web服务器通过端口9730使用json API与此队列交互。worker使用redis进行存储。 worker还将数据本地存储在文件夹worker / images /

在这个问题只关心工人。

worker / Dockerfile

FROM node:0.12

WORKDIR /worker

COPY package.json /worker/
RUN npm install

COPY . /worker/

docker-compose.yml

redis:
    image: redis
worker:
    build: ./worker
    command: npm start
    ports:
        - "9730:9730"
    volumes:
        - worker/:/worker/
    links:
        - redis

当我运行docker-compose构建,一切正常工作,所有的npm模块安装在/ worker / node_modules,正如我所料。

npm WARN package.json unfold@1.0.0 No README data

> phantomjs@1.9.2-6 install /worker/node_modules/pageres/node_modules/screenshot-stream/node_modules/phantom-bridge/node_modules/phantomjs
> node install.js

<snip>

但是当我做docker-compose了,我看到这个错误

worker_1 | Error: CAnnot find module 'async'
worker_1 |     at Function.Module._resolveFilename (module.js:336:15)
worker_1 |     at Function.Module._load (module.js:278:25)
worker_1 |     at Module.require (module.js:365:17)
worker_1 |     at require (module.js:384:17)
worker_1 |     at Object.<anonymous> (/worker/index.js:1:75)
worker_1 |     at Module._compile (module.js:460:26)
worker_1 |     at Object.Module._extensions..js (module.js:478:10)
worker_1 |     at Module.load (module.js:355:32)
worker_1 |     at Function.Module._load (module.js:310:12)
worker_1 |     at Function.Module.runMain (module.js:501:10)

结果没有一个模块存在于/ worker / node_modules(在主机或容器中)。

如果在主机上,我npm安装,那么一切工作就好了。但我不想这样做。我想让容器处理依赖。

这里有什么问题?

(不用说,所有包都在package.json中。)

解决方法

发生这种情况是因为您已将您的工作目录作为卷添加到docker-compose.yml中,因为卷在构建期间未挂载。

当Docker构建映像时,将在工作程序目录中创建node_modules目录,并在那里安装所有依赖项。然后在运行时,来自docker外部的工作目录被装载到docker实例(它没有安装的node_modules),隐藏刚刚安装的node_modules。您可以通过从docker-compose.yml中删除已安装的卷来验证这一点。

解决方法是使用数据卷来存储所有node_modules,因为在挂载工作程序目录之前,从已构建的docker镜像的数据中复制数据卷。这可以在docker-compose.yml中这样做:

redis:
    image: redis
worker:
    build: ./worker
    command: npm start
    ports:
        - "9730:9730"
    volumes:
        - worker/:/worker/
        - /worker/node_modules
    links:
        - redis

我不完全确定这是否对图像的可移植性施加任何问题,但因为它似乎你主要使用docker提供一个运行时环境,这不应该是一个问题。

如果你想阅读更多关于卷,有一个很好的用户指南在这里https://docs.docker.com/userguide/dockervolumes/

大佬总结

以上是大佬教程为你收集整理的node.js – npm install成功后,卷中不存在node_modules:node_modules全部内容,希望文章能够帮你解决node.js – npm install成功后,卷中不存在node_modules:node_modules所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。