为什么当构建退出错误时,来自docker文件的docker构建映像会创建容器?

沉亚伦

我正在使用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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么在构建docker映像时出现此错误?

为什么Docker容器会立即退出

在CentOS 7上构建Docker容器映像时出错

从Docker映像创建Docker容器时出错

docker构建后如何测试容器或映像?

基于Docker组成容器构建单个映像

在Gitlab Runner容器中构建Docker映像

在Jenkins容器中构建docker映像

为什么在删除容器引用的映像时docker会引发错误?

构建jenkins docker映像时出错

为什么Docker Mongo在映像构建期间拒绝连接

当R软件包安装返回错误时,让Docker映像构建失败

Docker 文件未在容器内找到错误以创建新映像

发生错误后继续构建Docker映像

在Jenkins(在Docker容器中)管道中构建Docker映像

构建MongoDB Docker映像

Docker条件构建映像

为什么与单阶段构建相比,多阶段构建的 Docker 映像更大?

为什么在构建映像时Docker Hub不缓存自动构建存储库?

Docker在构建映像时无法删除文件

Docker在构建映像时找不到文件

为什么构建Docker容器映像的第一步将基本映像作为源,在我看来它本身就是像ALPINE这样的操作系统?

构建Docker映像失败:在用户命令上退出

仅当构建成功且没有错误时,如何将 Docker 容器推送到 Docker Hub?

为什么docker-compose在docker-compose up上构建新映像?

构建docker映像后创建的许多<none>映像

如何在docker-compose中创建React应用?完成构建步骤后,容器将退出

通过minikube构建Docker多阶段映像时出错:找不到文件

如何在映像构建时/之后自动运行docker容器?