Docker 使用 --tag 构建命令无法标记图像

Docker build command with --tag unable to tag images

我正在尝试使用本地可用的 Docker 文件构建 Docker 图像。

docker build -t newimage .

我之前也多次使用过这个命令,但不知何故它目前不起作用,我一直在寻找它的原因。

如果有人可以帮助我提供可能的解决方案或可能的领域来寻找问题,我将非常有帮助。

我已经看过其他可能相关的帖子,例如:

Docker没问题。

一张图片可以有多个标签:

alpine    3.4      4e38e38c8ce0        6 weeks ago         4.799 MB
alpine    latest   4e38e38c8ce0        6 weeks ago         4.799 MB

在此示例中,id 为 4e38e38c8ce0 的图像被标记为 alpine:latestalpine:3.4。如果您要执行 docker build -t alpine .latest 标签将从映像 4e38e38c8ce0 中删除并分配给新建的映像(具有不同的 ID)。

如果您从图像中删除最后一个 tag,图像不会自动删除。它显示为 <none>.

Docker 也使用缓存。因此,如果您使用 Docker 文件构建映像,更改该文件,再次构建映像,而不是撤消更改并再次构建,您将有两个映像 - 您在第一步和最后一步中构建的映像是相同的.第二张图片将是 "tagged" <none>.

如果您想保留图像的多个版本,请使用 docker build -ttag:versionimage:tag . 其中 versiontag每次做一些改变都会改变。

编辑: 我所谓的tag其实就是镜像名,我所说的version就是所谓的tag:https://docs.docker.com/engine/reference/commandline/tag/

好的!我找到了问题的原因。

DOCKER 构建过程

当我们构建 docker 图像时,在创建图像的过程中会生成其他几个中间图像。我们从来没有在 docker images 中看到它们,因为随着下一个中间图像的生成,较早的图像最终是 removed.And 我们只有一个是最终图像。

我们使用 -t--tag 提供的标签用于最终构建,显然没有中间容器使用相同的标签。

问题解释

当我们尝试使用 Dockerfile 构建 docker 图像时,有时该过程未成功完成并显示类似 Successfully built image with IMAGEID

的消息

所以很明显失败的构建不会在docker images

中列出

现在,带有标签 <none> 的图像是其他图像(中间)。这造成了图像存在但没有标签的混淆,但图像实际上不是最终构建应该的图像,因此没有标记。

此案例的解决方案之一,运行 如果所有其他图像都已标记,则在生成命令后立即在命令下方。

docker tag $(docker image ls | grep "<none>" | awk '{print }') newimage:latest

据我所知,这仅适用于 linux os。

如果您的 Dockerfile 的最后一行是 运行 那么它可能会在构建期间挂起。

我将 RUN npm start 更改为 CMD ["npm", "start"],现在正在标记。