当没有正在运行的容器时,Docker会创建悬空图像

时间:2017-01-17 09:00:11

标签: docker docker-build

我尝试将我的Java应用程序停靠。每当我构建新图像时,Docker都会将新图像添加到列表中而不删除旧图像。我没有运行图像,我只是一次又一次地构建。我认为它应该删除旧的。我错了吗?

Docker文件

FROM frolvlad/alpine-oraclejdk8:slim
VOLUME /tmp
ADD ./build/libs/admin-app-0.1.jar app.jar
CMD ["java","-jar","app.jar"]

命令

sudo gradle build
sudo docker build . -t admin-app:latest

结果

enter image description here

2 个答案:

答案 0 :(得分:0)

这完全正常。 docker在构建过程容器中创建并在构建最终容器后将它们抛弃。见这里(http://www.projectatomic.io/blog/2015/07/what-are-docker-none-none-images/

你可以使用一些bash行轻松删除它们。见这里(How to remove old and unused Docker images

答案 1 :(得分:0)

之所以以悬空的图像(未标记图像的名称显示<none>)为结尾,是因为您多次成功地使用相同的名称构建相同的图像/标记admin-app:latest
在这种情况下,已经用此标签构建的先前(旧)图像将变成“悬空图像”,因为新构建的图像已将其替换。 Docker不想覆盖(删除)它,而只是通过标记<none>来表明该映像没有名称。

当构建失败时,您还可以生成悬空的图像。

要摆脱悬空的图像,您可以:

  • 每次执行构建时,请使用不同的标签,以避免使用<none>标签的图像。
  • 使用docker rmi $(docker images -f "dangling=true" -q)删除它们。