Loading

调试docker build过程中出错的Dockerfile

原理

当我们执行docker build命令使用Dockerfile构建一个新的镜像时,docker内部的构建过程大致如下:

  1. 从基础镜像运行一个容器;
  2. 执行一条指令,对容器做修改;
  3. 执行类似docker commit的操作,生成一个新的镜像层;
  4. Docker会再基于刚刚提交的镜像运行一个新容器;
  5. 重复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中的命令来手动执行排查出错的原因即可。

参考

Debugging a Dockerfile

posted @ 2020-12-20 17:40  Suiyek  阅读(3942)  评论(0编辑  收藏  举报