首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的容器一直在建造同一层?

为什么我的容器一直在建造同一层?
EN

Stack Overflow用户
提问于 2019-02-09 15:53:22
回答 2查看 115关注 0票数 0

下面的容器在第二次运行后正在失败。在尝试调试它时,我必须再次运行它。

代码语言:javascript
复制
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的理解是,容器中的层应该缓存,并且只有在文件更改时才能重新构建?

我希望你能给我指点。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-09 16:05:50

Dockerfile中的每条指令都会产生一个图像层(除了少数例外),并且在构建过程中图像层被用作缓存。但是,一旦一个层失效,随后的所有层都必须重建。

在您的示例中,如果COPY . .指令导致一个差异,那么下面的RUN apk ...指令也将失效,导致它被重新运行。

我建议您在复制项目文件之前安装高山包,然后再执行npm安装。

票数 1
EN

Stack Overflow用户

发布于 2019-02-09 16:06:05

是否在调试时更改停靠文件,或在当前目录中存在停靠文件的任何其他文件?如果是的话,那么COPY . .基本上也在复制您的停靠文件或应用程序文件,并且由于文件随每次构建而发生更改,所以下面的所有层(包括COPY . . )都不会从缓存中使用。因此,只有WORKDIR /usr/src/app将从缓存中使用。

希望这能有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54607906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档