Aar*_*hen 4 docker docker-image
我正在使用docker从docker文件构建图像.在此过程中发生了一些错误,因此构建退出时出现错误代码.
当我跑步时,docker images我可以看到无标记的图像.所以我试图删除它docker rmi xxxxx.但它总是失败,它说图像无法删除,因为它被停止的容器使用.
所以我深入挖掘一下.我运行docker ps -a,现在我可以看到在构建过程失败时创建的已停止容器的长列表.
为什么会有容器创建?我认为图像就像编程中的"类"概念,而容器是类的实例.在成功构建映像之前,为什么会创建实例?如何在没有所有停止的容器的情况下构建映像?
Dockerfile的每一行都创建一个中间容器来执行该行的Dockerfile指令.
如果指令成功,那将创建一个中间图像,它将成为下一个容器启动的基础(执行Dockerfile的下一行)
如果所述指令失败,则可以使容器处于"退出"状态,从而阻止其创建的中间图像.
只需清理所有容器然后清除所有图像,然后再试一次.
如果您尝试重复构建Dockerfile,最终会得到一组中间图像和容器.
这就是为什么当我的构建(最终)成功时,我总是在构建脚本中清理额外的容器,图像和(使用docker 1.10+)卷:
cmdb="docker build${proxy}${f} -t $1 $2"
# echo "cmdb='${cmdb}"
if eval ${cmdb}; then
docker rm $(docker ps -qa --no-trunc --filter "status=exited" 2>/dev/null) 2>/dev/null
docker rmi $(docker images --filter "dangling=true" -q --no-trunc 2>/dev/null) 2>/dev/null
docker volume rm $(docker volume ls -qf dangling=true 2>/dev/null) 2>/dev/null
exit 0
fi
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
878 次 |
| 最近记录: |