为什么我无法使用docker-sompose run命令安装node_module

时间:2019-11-16 17:05:58

标签: node.js docker docker-compose node-modules

我有一份明确的申请。我使用docker-compose来运行它。要运行我的应用程序,请使用以下命令:

docker-compsoe up

如果我是第一次运行它,并且没有任何node_modules-终端出现错误,例如“找不到模块'express',请安装它,然后重试...”。所以,我只是再打开一个终端,然后运行下一个命令:

docker-compose exec backend npm i

模块安装几秒钟。并且,我的应用程序开始在上一个终端中运行。我一直使用这种方法,但是现在我找到了run用于docker-compose的命令。当不引发容器时,它允许您在容器中执行某些命令。因此,我想尝试此命令,并删除了./node_modules目录,停止所有容器,关闭所有终端,打开终端并运行命令:

docker-compose run backend npm i

模块开始安装,我等待大约10分钟,但它在中间停止。我不明白为什么?如果我在第二个终端中尝试upnpm i,则可以,但是使用命令run-不能。我做错了什么?

1 个答案:

答案 0 :(得分:0)

您不应将节点模块安装在正在运行的容器中。相反,您应该通过Docker文件将其安装在映像中,然后通过docker或docker-compose运行它。

您的Dockerfile应该看起来像这样:

FROM node:10      # or the version of node you are using
WORKDIR /usr/src/app      #replace this with your app code path
COPY package.json /usr/src/app
RUN npm install
COPY app-code/ /usr/src/app/app-code  # again, use your own path
EXPOSE 3000
CMD ["npm", "start"]  

您必须从dockerfile运行npm install,而不要复制开发节点文件夹,因为容器中的环境可能与您的开发环境不同。

然后,您可以从docker-compose文件运行它。