下面的容器在第二次运行后正在失败。在尝试调试它时,我必须再次运行它。
FROM node:10-alpine
# Create app directory
WORKDIR /usr/src/app
# Copy app
COPY . .
# USER root
# install packages
RUN apk --no-cache --virtual build-dependencies add \
git \
python \
make \
g++ \
&& npm config set user 0 \
&& npm config set unsafe-perm true \
&& npm i -g wait-on concurrently truffle@4.1.15\
&& npm install \
&& apk del build-dependencies
RUN truffle compile --all // FAILS HERE
# Expose the right ports, the commands below are irrelevant when using a docker-compose file.
EXPOSE 3000
CMD ["npm", "run", "server"] 每当我重新构建容器时,它就会从第一次运行开始结束,这会使进程更长。
我对docker的理解是,容器中的层应该缓存,并且只有在文件更改时才能重新构建?
我希望你能给我指点。
发布于 2019-02-09 16:05:50
Dockerfile中的每条指令都会产生一个图像层(除了少数例外),并且在构建过程中图像层被用作缓存。但是,一旦一个层失效,随后的所有层都必须重建。
在您的示例中,如果COPY . .指令导致一个差异,那么下面的RUN apk ...指令也将失效,导致它被重新运行。
我建议您在复制项目文件之前安装高山包,然后再执行npm安装。
发布于 2019-02-09 16:06:05
是否在调试时更改停靠文件,或在当前目录中存在停靠文件的任何其他文件?如果是的话,那么COPY . .基本上也在复制您的停靠文件或应用程序文件,并且由于文件随每次构建而发生更改,所以下面的所有层(包括COPY . . )都不会从缓存中使用。因此,只有WORKDIR /usr/src/app将从缓存中使用。
希望这能有所帮助。
https://stackoverflow.com/questions/54607906
复制相似问题