【软件工具】Dockerfile 中指定使用 `latest` 标签拉取基础镜像,但实际上拉取到的并不是最新版本原因

本文解释了Docker构建过程中FROM指令如何拉取基础镜像,分析了使用latest标签拉取非最新版本的原因,包括本地缓存、远程仓库标签未更新以及拉取策略,并提供了解决方法和管理容器的技巧,如进入容器、jar包解压和容器删除/停止操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Docker 构建过程中,FROM 拉取基础镜像原理

在 Docker 构建过程中,FROM 指令在 Dockerfile 中用于指定基础镜像,它告诉 Docker 从哪个镜像开始构建你的新镜像。这个指令是每个 Dockerfile 的起点,也是构建自定义镜像的基础。以下是这一步骤拉取动作的内部工作原理:

拉取基础镜像的过程

  1. 解析 FROM 指令:当 Docker 解析 Dockerfile 并遇到 FROM 指令时,它会查看指令后面指定的镜像名称和标签(或摘要)。例如,FROM ubuntu:20.04 指定了使用名为 ubuntu 的镜像和 20.04 这个版本标签。

  2. 检查本地缓存:Docker 首先检查本地是否已经存在指定的镜像和标签。如果本地存在且用户没有通过命令显式要求强制拉取最新版本(例如,在构建前手动执行 docker pull ubuntu:20.04),Docker 将使用本地缓存的镜像进行构建,不会从远程仓库拉取。

  3. 从远程仓库拉取:如果本地不存在指定的镜像和标签,Docker 则会从配置的远程仓库(默认是 Docker Hub)拉取所需的镜像。Docker 客户端会向仓库发送请求,下载镜像和所有必要的层到本地。

  4. 使用基础镜像构建新镜像:一旦基础镜像被拉取到本地(或确认本地已有),Docker 会使用这个镜像作为新镜像构建的起点。接下来,Dockerfile 中的其他指令(如 RUNCOPYCMD 等)会被执行,以在基础镜像上添加新的层,最终形成新的镜像。

控制拉取行为

  • 要确保总是使用最新版本的基础镜像进行构建,可以在构建之前手动执行 docker pull 命令强制拉取最新版本的镜像。
  • 对于重要或生产环境的构建,推荐在 Dockerfile 中使用具体的版本号而不是 latest 标签,以保证构建的一致性和可重复性。

自动拉取的触发

当执行 docker build 命令开始构建镜像时,如果 Dockerfile 中的 FROM 指令指定的基础镜像不在本地,或者用户通过 docker build --pull 选项强制更新,Docker 就会自动执行上述拉取过程。这样确保了每次构建都基于最新或指定的基础镜像。

二、使用 latest 标签拉取基础镜像并不是最新版本原因

当你在 Dockerfile 中指定使用 latest 标签拉取基础镜像,但实际上拉取到的并不是最新版本,可能是由于以下几个原因:

1. 本地缓存

最常见的原因是 Docker 在你的机器上已经有了该镜像的 latest 版本的本地缓存。当 Docker 发现本地已经存在请求的镜像和标签时,它默认会使用这个本地版本,而不会去远程仓库检查是否有更新。这意味着即使远程仓库中的 latest 标签已经更新,你仍然会得到本地缓存的版本。

解决方案

要确保每次都能拉取到最新版本的镜像,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿寻寻

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值