如何升级泊坞窗图像而不创建新图像?

如何升级泊坞窗图像而不创建新图像?

问题描述:

这似乎是最简单的问题,我无法找到答案。如何升级泊坞窗图像而不创建新图像?

  1. 我构建了一个docker镜像。
  2. 运行docker images显示它存在。
  3. 然后我将一个新行添加到Docker文件中。
  4. 然后我重建图像。
  5. 旧图像仍在docker images现在有一个新的图像。

如何更新旧图像而不创建新图像?

我的搬运工命令:docker build -t nick_app . --force-rm --no-cache

(注:我刚才扔那些--force-rm命令和--no-cache命令”,因为它似乎是它的工作)

之前:

Dockerfile:

FROM ruby:2.3.3 
RUN apt-get update -qq && apt-get install -y 
CMD ["echo", "Sup"] 

搬运工图像命令:

REPOSITORY   TAG     IMAGE ID   CREATED    SIZE 
nick_app   latest    421662154c3f  9 minutes ago  746.9 MB 
ruby    2.3.3    d00ebde6a601  2 days ago    730.1 MB 
hello-world   latest    c54a2cc56cbb  4 months ago   1.848 kB 

后: Dockerfile:

FROM ruby:2.3.3 
RUN apt-get update -qq && apt-get install -y \ 
    build-essential 
CMD ["echo", "Sup"] 

泊坞窗图像命令:

REPOSITORY   TAG     IMAGE ID   CREATED    SIZE 
nick_app   latest    bcf9b3667202  3 seconds ago  746.9 MB 
<none>    <none>    421662154c3f  10 minutes ago  746.9 MB 
ruby    2.3.3    d00ebde6a601  2 days ago   730.1 MB 
hello-world   latest    c54a2cc56cbb  4 months ago  1.848 kB 

每dockerfile变化让我上创建重建一个新的形象none。它们是累积的,所以每次我进行更改和重建时,我都会得到另一个none图像。

每次我改变码头文件时,如何摆脱中间的none

+0

毕竟,你正在创建图像的新版本,因此正在发生的事情是有意义的。你必须以某种方式来包装它,也就是说你有一个你直接调用的bash脚本,而不是'docker build'(把答案显示在答案中)。 – Arran

+0

当我对文本文件进行更改时,它在技术上是文本文件的新版本,但文字处理器仍会处理更新新文本文件而不创建中间文件。 似乎这可能是Docker应用程序窥探的有用案例:如果使用相同标记重建,假定它将是相同的图像并删除所有中间体/旧版本。 –

这些<none>:<none>实际上是您的应用程序的旧版本,因为您已将nick_app:latest移至新版本,所以它已失去其指定指针。

当建立你的形象,我不认为你可以告诉它破坏旧图像,它只会创建一个新的。 但是有一个命令,可以帮助你列出或删除这些悬挂图片:

docker images --filter dangling=true #lists all images that are dangling and has no pointer to it 
docker rmi `docker images --filter dangling=true -q` #Removes all those images. 
+0

感谢您的信息。 不爱,没有标志或选项自动执行此操作。 这似乎是一个非常常见的用例。 我已经有了捷径'docker rmi $(docker images -f“dangling = true”-q)' 但是在每次重建时都要做到这一点,似乎有点不雅。 –