我正在使用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
的原因。我怀疑这可能是我错误的原因,但我不确定如何规避这一点。
答案 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安装整个目录,所以似乎正确安装了新的目录。