如何避免单个命令/ RUN的Docker构建缓存?

时间:2019-01-22 14:07:41

标签: docker dockerfile

我将RUN ls /some/directory用于Dockerfile的“打印调试”。该命令运行一次且之前未更改任何命令后,结果将被缓存并且不提供任何输出。

我可以用从未执行过的部分来更改命令,例如追加|| echo some changing number],这对于每次运行都会造成麻烦,或者关闭构建缓存,这会影响RUN的数量超过必要,从而减慢Dockerfile的开发速度。

有没有一种方法可以仅对一个RUN禁用缓存,而没有任何上述缺点?

1 个答案:

答案 0 :(得分:1)

使用build arg是可以接受的解决方案吗?

# Dockerfile
FROM alpine
RUN echo "executed 1"

# Above this will be cached, below will be retriggered with new builds
ARG BUILD

RUN echo "executed 2"

然后,以不同的arg参数运行,以重新运行ARG以下的所有内容

$ docker build --build-arg BUILD=2 -t temp .

或者,使用date作为内部版本号:

$ docker build --build-arg BUILD="$(date)" -t temp .