Dockerfile 节点未安装依赖项

时间:2021-05-08 14:58:49

标签: node.js docker npm docker-compose

这是我的 Dockerfile:

FROM node:15.3.0
ENV NODE_ENV=development
WORKDIR /usr/src/app
COPY . .
RUN node -v
RUN npm install -g nodemon
RUN npm install -g express
RUN npm install
CMD [ "npm", "start" ]

我的 docker-compose 文件:

version: "3.8"
services:
  web:
    container_name: api-mmogc-web
    build: .
    volumes:
      - .:/usr/src/app
    ports:
      - "6510:3000"
    depends_on:
      - db

但它不会在构建时安装节点依赖

docker-compose up --build

图像 ls

root@xxx:/usr/src/app# ls -l
total 392
-rw-r--r--  1 root root    177 May  8 14:52 Dockerfile
-rw-r--r--  1 root root   1773 May  8 14:44 app.js
drwxr-xr-x  3 root root     96 May  8 14:44 bin
drwxr-xr-x  5 root root    160 May  8 14:44 config
drwxr-xr-x  3 root root     96 May  8 14:44 constants
-rw-r--r--  1 root root    582 May  8 14:44 docker-compose.yml
drwxr-xr-x  3 root root     96 May  8 14:44 middleware
drwxr-xr-x  7 root root    224 May  8 14:44 migrations
drwxr-xr-x  9 root root    288 May  8 14:44 models
-rw-r--r--  1 root root    386 May  8 14:44 notas.txt
-rw-r--r--  1 root root   1332 May  8 14:44 nothing.js
-rw-r--r--  1 root root 371443 May  8 14:44 package-lock.json
-rw-r--r--  1 root root   1129 May  8 14:44 package.json
drwx------ 26  999 root    832 May  8 14:54 postgres_data
drwxr-xr-x  3 root root     96 May  8 14:44 public
drwxr-xr-x  5 root root    160 May  8 14:44 routes
drwxr-xr-x  5 root root    160 May  8 14:44 seeders
-rw-r--r--  1 root root     53 May  8 14:44 setup-test.js
drwxr-xr-x  6 root root    192 May  8 14:44 utils
drwxr-xr-x  5 root root    160 May  8 14:44 views

已编辑。 根据评论。

评论已安装的依赖项,但现在我在主机上的更改未反映在 image

services:
  web:
    container_name: api-mmogc-web
    build: .
    # volumes:
    #   - .:/usr/src/app

1 个答案:

答案 0 :(得分:0)

不要从 volumes 中删除 docker-compose.yml。在使用卷时安装 node_modules 很棘手。

有几种方法可以做到这一点。我建议您将此步骤添加到您的 dockerfile 中:

# Installing node_modules to another folder and load it from there
RUN ["mkdir", "/modules"]
ADD ["./package.json", "/modules"]
WORKDIR /modules
RUN npm install
ENV NODE_PATH=/modules/node_modules

# Set the WORKDIR
WORKDIR /usr/src/app

编辑:您不应将 COPYWORKDIR 一起使用。因为当您同时使用它们时,您将再次使用 /usr/src/app 命令覆盖创建的 COPY 文件夹。所以,如果你要使用这个技巧,你也应该删除 COPY