为什么会产生悬空的图像?

时间:2019-05-22 18:57:08

标签: docker

我有Dockerfile,如下所示:

FROM openjdk:8 as stage0
WORKDIR /opt/docker
COPY opt /opt
USER root
RUN ["chmod", "-R", "u=rX,g=rX", "/opt/docker"]
RUN ["chmod", "u+x,g+x", "/opt/docker/bin/sapmock"]

FROM openjdk:8
USER root
RUN id -u demiourgos728 2> /dev/null || (( getent group 0 || groupadd -g 0 root ) && useradd --system --create-home --uid 1001 --gid 0 demiourgos728 )
WORKDIR /opt/docker
COPY --from=stage0 --chown=demiourgos728:root /opt/docker /opt/docker
EXPOSE 8080
USER 1001:0
ENTRYPOINT ["/opt/docker/bin/sapmock"]
CMD []

然后,我将创建如下图像:

docker build -t sapmock .
Sending build context to Docker daemon  38.83MB
Step 1/15 : FROM openjdk:8 as stage0
8: Pulling from library/openjdk

构建成功。当我列出创建的图像时,它显示:

 docker images
REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
sapmock             latest              b0c10315185f        About a minute ago   664MB
<none>              <none>              c9210e522d87        About a minute ago   703MB
openjdk             8                   bec43387959a        2 weeks ago          625MB

什么是<none>图片,为什么创建它?

2 个答案:

答案 0 :(得分:1)

创建新的docker映像时,如果它与现有的docker映像具有相同的名称,则不会删除旧的docker映像,而是将其变成具有名称和标签{{1 }}

您可以使用<none>删除悬空的图像

答案 1 :(得分:1)

作为多阶段构建的一部分,这两行FROM构建了两个图像,但是您只在最后标记了其中一个。另一个图像保留在构建缓存中,使将来的构建可以更快地运行并重用以前的构建中的图层。