新的package.json包不在Docker容器中显示

我使用Docker Compose使用Docker,这些是我的文件:

#DOCKERFILE FROM mhart/alpine-node # Create app directory RUN mkdir -p /home/app # Bundle app soure COPY . /home/app # From now on we work in /home/app WORKDIR /home/app # Install yarn and node modules RUN echo -e 'http://dl-cdn.alpinelinux.org/alpine/edge/main\nhttp://dl- cdn.alpinelinux.org/alpine/edge/community\nhttp://dl- cdn.alpinelinux.org/alpine/edge/testing' > /etc/apk/repositories \ && apk add --no-cache yarn \ && yarn EXPOSE 8080 

这是dev的docker-compose文件:

 app: build: . command: yarn start:dev environment: NODE_ENV: development ports: - '8080:8080' volumes: - .:/home/app - /home/app/node_modules 

我遇到的问题是,这个设置似乎只工作一次,因为无论我将哪个新模块添加到package.json ,每当我运行docker-compose build它都不会安装新的软件包。

我使用卷的原因是因为nodemon在没有.:/home/app情况下工作不正常,但是如果节点模块没有安装在主机上,那么它将会失败,因此我需要/home/app/node_modules 。 我怀疑这可能是我的错误的原因,但我不知道如何绕过这一点。

应该将package.json复制到app目录中,并在复制捆绑包行之前在Dockerfile中调用“npm install”。

 #DOCKERFILE FROM mhart/alpine-node # Create app directory RUN mkdir -p /home/app WORKDIR /home/app # Install app dependencies COPY package.json /home/app RUN npm install # Bundle app soure COPY . /home/app # Install yarn and node modules RUN echo -e 'http://dl-cdn.alpinelinux.org/alpine/edge/main\nhttp://dl- cdn.alpinelinux.org/alpine/edge/community\nhttp://dl- cdn.alpinelinux.org/alpine/edge/testing' > /etc/apk/repositories \ && apk add --no-cache yarn \ && yarn EXPOSE 8080 

如果package.json中有任何新的依赖关系寄存器,则应在docker build命令被调用时安装。

我通过将src代码移到src目录中解决了这个问题。 这意味着我docker-compose.yml文件现在看起来像这样:

 app: build: . command: yarn start:dev environment: NODE_ENV: development ports: - '8080:8080' volumes: - ./src:/home/app/src 

由于我没有安装node_modules的整个目录,新的似乎安装正确。