Docker 默认构建使用的是 BuildKit(现代构建系统),它的特性是:
- 为了加速构建和清晰展示,只显示命令完成状态(✔、CACHED 等)
- 不会实时、完整地显示
RUN
命令的控制台输出 - 只有命令出错时才显示 stderr
解决方案 1:禁用 BuildKit,恢复传统日志行为(推荐调试用)
在构建命令前加环境变量:
DOCKER_BUILDKIT=0 docker build -t your-image-name .
然后你就能看到像传统那样,RUN ls -al
或 find .
的输出会全部打印出来:
Step 5/7 : RUN find . -type f
---> Running in 123456abcdef
./package.json
./src/index.tsx
...
只建议在调试阶段使用,禁用 BuildKit 会稍慢一点。
解决方案 2:用显式错误输出欺骗 BuildKit
BuildKit 会显示 stderr 输出,所以你可以把内容转到 stderr:
RUN find . 1>&2
或者:
RUN echo "目录内容:" 1>&2 && find . 1>&2
这样就能在 BuildKit 开启的情况下把输出“骗”出来。
建议调试用构建命令(推荐用法)
DOCKER_BUILDKIT=0 docker build -t test-image .
或者--progress=plain
:
docker build --progress=plain -t test-image .
--progress=plain
也能让 BuildKit 输出更详细,不用完全关闭它。