调试docker build过程中出错的Dockerfile
原理
当我们执行docker build
命令使用Dockerfile构建一个新的镜像时,docker内部的构建过程大致如下:
- 从基础镜像运行一个容器;
- 执行一条指令,对容器做修改;
- 执行类似
docker commit
的操作,生成一个新的镜像层; - Docker会再基于刚刚提交的镜像运行一个新容器;
- 重复2 ~ 4步,直到Dockerfile中的所有指令执行完毕。
因此,我们只需要在出错的时候重新启动出错前一步的Docker容器即可回溯到出错前的场景,然后再手动执行出错的命令来分析出错的原因。
举个栗子
执行docker build
过程中出现如下错误:
Step 9/26 : RUN XXXXXX
...
...
---> fb41878be150
Step 10/26 : RUN XXXXXX
---> Running in 24bc7a0a5c87
...
error: XXX
可以看到在Step9之后会临时保存 container:fb41878be150
我们只需执行以下命令即可到达出错前的容器状态:
docker container run -it fb41878be150 /bin/bash
最后再根据实际Dockerfile中Step10中的命令来手动执行排查出错的原因即可。