【问题标题】:New package.json packages are not showing in Docker container新的 package.json 包未显示在 Docker 容器中
【发布时间】:2017-12-20 12:53:44
【问题描述】:

我正在使用 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

这是用于 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 时,它都不会安装新包。

我使用卷的原因是因为没有.:/home/app,nodemon 将无法工作,但是如果主机中没有安装节点模块,那么它将失败,我需要/home/app/node_modules 的原因。我怀疑这可能是我的错误的原因,但我不知道如何规避它。

【问题讨论】:

    标签: node.js docker docker-compose dockerfile package.json


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      应该将 package.json 复制到 app 目录中,并在复制 bundle 行之前在 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 命令时安装。

      【讨论】:

      • 注意我使用yarn 进行安装。无论如何,不​​幸的是,在您的回复中更改命令的顺序并没有帮助。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-10-19
      • 1970-01-01
      • 1970-01-01
      • 2018-08-04
      • 2016-11-22
      • 1970-01-01
      • 2015-12-09
      相关资源
      最近更新 更多