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

时间:2017-07-15 15:03:37

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

我正在使用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时,它都不会安装新包。 / p>

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

2 个答案:

答案 0 :(得分:2)

应该将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命令时安装它。

答案 1 :(得分:2)

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