当我运行docker-compose build
命令在Docker中重建图像时,因为我在Dockerfile中更改了一些内容,有时我会得到"none"图像标记。我们如何才能避免这个事实?我想重建图像,但none图像不应出现。
REPOSITORY TAG IMAGE ID CREATED SIZE
magento2 latest b4dce4dcbd4f 16 hours ago 516MB
<none> <none> b4ffce2bf91e 16 hours ago 519MB
<none> <none> a1aedb60c82a 17 hours ago 516MB
<none> <none> ec9a14ae856c 20 hours ago 519MB
<none> <none> ef8eba6874cc 23 hours ago 516MB
<none> <none> 0e53a8b8c303 23 hours ago 516MB
php 7.1-apache 93e6fb4b13e1 3 weeks ago 369MB
mysql 5.6.39 079344ce5ebd 7 months ago 256MB
以下是Docker<none>:<none>
图像的一些部分?
好的
<none>:<none>
这些是中间图像,可以使用
docker images -a
看到。它们不会导致磁盘空间问题,但这绝对是一个屏幕"问题";房地产;问题由于所有这些<none>:<none>
图像的含义可能相当混乱。坏的
<none>:<none>
这些映像是悬挂的映像,可能会导致磁盘空间问题。这些
<none>:<none>
图像被列为docker images
的一部分并且需要被修剪。(Docker中的悬空文件系统层是未使用的,并且没有被任何图像引用。因此,我们需要一种机制让Docker清除这些悬空图像(
因此
-
如果您的案例与
dangling
图像有关,可以使用删除它们docker rmi $(docker images -f "dangling=true" -q)
还有
docker image prune
选项,但客户端和守护程序API都必须至少为v1.25
才能使用此命令。 -
如果您的案例与
intermediate
图像有关,可以保留它们,其他图像则指向它们的引用。
相关文档:
- docker rmi
- docker镜像rm
- docker图像修剪
根据我的经验,大多数<none>
图像都由临时容器保存。由于Docker架构,这些容器即使在停止后也会被保留下来。您可以使用验证您有多少停止的容器
docker ps -a
因此,要删除<none>
图像,首先需要删除不需要的容器:
docker container prune
docker image prune
以上两个命令可以缩写为
docker system prune
根据@tgogos的说法,除了需要更多的投票外,几乎没有什么可添加的。
您可以在此处检查悬挂和非悬挂图像的图像大小:
docker system df -v
不要被中间图像所困扰。通过这种方式,您可以通过为Dockerfile的每一行保留中间图像来监督构建过程的效率,也就是说,如果没有发生更改,那么在构建过程中可以跳过这一行。
您可以使用移除悬挂的图像
docker rmi $(docker images -f "dangling=true" | grep "<none>.*<none>" | awk '{ print $3; }')
这将删除Windows:中所有悬挂的docker图像
for /f %x in ('docker images -f "dangling=true" -q') do docker rmi %x
要删除<none>
层,请使用:
docker rmi $(docker images --filter "dangling=true" -q --no-trunc)