Att*_*igh 16 caching build docker
我有一个长时间运行的 docker 构建过程,所以我不想禁用整个构建的缓存(使用--no-cache)。但是,我想使特定步骤的缓存无效。
我有一个好主意:删除缓存层并重建,因此必须重建。
我用了:
docker build --progress=plain
Run Code Online (Sandbox Code Playgroud)
获取缓存层的 sha:
#16 [stage-9 3/15] RUN pip install -r /tmp/requirements.lock
#16 sha256:e4ac79a1eac5702cd296ccf33a1cfa2e0c3890c77d42737dc62a3b26ac3e798e
#16 CACHED
Run Code Online (Sandbox Code Playgroud)
但后来我得到了这个错误
> docker rmi e4ac79a1eac5702cd296ccf33a1cfa2e0c3890c77d42737dc62a3b26ac3e798
Error: No such image: e4ac79a1eac5702cd296ccf33a1cfa2e0c3890c77d42737dc62a3b26ac3e798
Run Code Online (Sandbox Code Playgroud)
有没有一种(简单)方法删除该层?
注意:对于大多数用例(甚至可能是这个),您可能希望使用--no-cache选项docker build
不直接可能。但可以通过对 docker 文件进行一些更改来完成。
要强制破坏缓存,可以使用“构建时参数”(ARG);更改该参数的值会破坏缓存及其后的每一步,例如:
FROM something
RUN apt-get update && apt-get install foo bar baz ......
ARG CACHE_DATE=2016-01-01
# steps below will always be executed if `CACHE_DATE` is changed to a unique value
RUN blablabla
Run Code Online (Sandbox Code Playgroud)
并在构建期间为 CACHE_DATE 设置新日期:
docker build --build-arg CACHE_DATE="$(date)" ....
Run Code Online (Sandbox Code Playgroud)
详细信息直接取自此 github 问题。
也许你可以通过这个命令删除:
docker rm e4ac79a1eac5702cd296ccf33a1cfa2e0c3890c77d42737dc62a3b26ac3e798
Run Code Online (Sandbox Code Playgroud)
因为您仍然使用相同的映像和不同的容器。
| 归档时间: |
|
| 查看次数: |
2492 次 |
| 最近记录: |