docker - 从 Dockerfile 构建映像后的多个 Docker 映像
问题描述
我制作了一个 Dockerfile 来构建基于另一个 Dockerfile 的图像。它使用 Alpine Linux 作为基础。
一切正常,但是当我使用--all
开关查看图像时,我得到了多个实例,这些实例似乎是我的图像和它所基于的 Alpine Linux 的图像:
$ docker image ls -a
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> 5577c25bccd9 20 hours ago 137MB
<none> <none> 48f944e609b5 20 hours ago 137MB
paradroid/myapp latest f2a0f99986a6 20 hours ago 137MB
<none> <none> d846706db3f4 20 hours ago 137MB
<none> <none> f1410e1d307e 20 hours ago 137MB
<none> <none> e52e6203864a 20 hours ago 137MB
<none> <none> dd3be52289ce 20 hours ago 5.59MB
<none> <none> 8559960a8bd0 20 hours ago 5.59MB
<none> <none> 04020d8307b3 20 hours ago 5.59MB
<none> <none> fe0f1e73261c 20 hours ago 5.59MB
<none> <none> 12229a67b395 20 hours ago 5.59MB
alpine latest cc0abc535e36 13 days ago 5.59MB
在构建它所基于的 Dockerfile 时不会发生这种情况。
docker system prune
不会删除它们,任何单独删除它们的尝试都会给出以下响应:
$ docker image rm d846706db3f4
Error response from daemon: conflict: unable to delete d846706db3f4 (cannot be forced) - image has dependent child images
我怎样才能找出造成这种情况的原因?
解决方案
<none:none>
图像是您的docker build
.
Docker 镜像由层组成。Dockerfile 中的每条指令都会产生一个层。这些层在不同的图像之间重复使用。这导致磁盘空间的有效使用。因此,如果一个图层被另一个图像使用,您将无法删除该图层。
您可以运行以下命令,该命令将删除任何图像中未引用的图层。这些层称为dangling
。
docker rmi $(docker images -f "dangling=true" -q)
https://www.projectatomic.io/blog/2015/07/what-are-docker-none-none-images/
推荐阅读
- python-3.x - python xlsxwriter 从单元格中提取值
- java - 在接口的两个实现之间移动公共代码
- html - 如何将 thymeleaf 表单中的两个对象传递给 Spring Controller?
- javascript - React JS npm 开始给端口忙,但它是免费的
- python - 带有分号数据的字典到 Pandas Dataframe
- python-3.x - Python NetworkX:节点收缩后的图形更新
- r - 是否有 R 函数可以以这种形式获取我的数据库?尝试收集并没有解决我的问题
- azure - 使用 Azure DevOps 进行 Azure Sql 开发的标准是什么?
- reactjs - 如何在标签导航中访问导航道具 - 反应导航
- embedded - Stm32 ADC - DMA 传输仅使用半缓冲区