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

New package.json packages are not showing in Docker container

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

#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

这是开发的 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 它都不会安装新包。

我使用这些卷的原因是没有 .:/home/app nodemon 将无法工作,但是如果主机中没有安装节点模块那么它就会失败,我需要 [=17= 的原因].我怀疑这可能是我出错的原因,但我不确定如何规避它。

应将 package.json 复制到应用程序目录,并在复制捆绑行之前在 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 构建命令时安装它。

我通过将我的 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 安装整个目录,新的似乎安装正确。