docker build使用--progress=plain时RUN echo命令输出不显示如何解决?
Docker构建时RUN指令echo输出不显示问题解决
核心原因
- Docker 18.09及后续版本默认启用BuildKit构建后端,默认会复用已缓存的构建层,如果对应RUN指令所在层之前已经构建完成被缓存,再次构建时不会重新执行该指令,也就不会输出对应内容。
- 即便未命中缓存,BuildKit的默认输出逻辑也存在对标准输出内容的折叠规则,仅加
--progress=plain参数可能无法正常展示未重新执行的指令输出。
解决方案
方法1:临时禁用构建缓存执行构建
强制让所有Dockerfile指令重新执行,即可看到RUN指令的输出,执行命令:
docker build . --progress=plain --no-cache
该方法不需要修改Dockerfile,适合临时调试场景使用。
方法2:修改RUN指令将输出重定向到标准错误
Docker默认会打印所有标准错误的输出,不会被BuildKit过滤,修改Dockerfile对应RUN行即可:
FROM node:12.19 RUN echo aaaaa >&2
修改后即使走缓存重跑这一层,输出也会正常展示。
方法3:临时关闭BuildKit构建后端
如果不需要使用BuildKit的特性,也可以在构建时临时关闭BuildKit,兼容旧版本的构建输出逻辑:
DOCKER_BUILDKIT=0 docker build . --progress=plain
内容的提问来源于stack exchange,提问作者programista5k
相关产品推荐
相关产品推荐

