1

我有基于 的图像microsoft/aspnet:4.6.2,当那些(我的)图像被构建microsoft/aspnet:4.6.2时,为了构建我自己的图像而被拉下。所以,在我的本地计算机中,我有microsoft/aspnet:4.6.2图像。假设基础映像已更新,Microsoft 发现映像存在错误并决定进行修复以维护标签,因此仍会调用microsoft/aspnet:4.6.2它,但实际上它与我构建自己的映像时不同。

所以我有两个问题:
1. 每次我的镜像被拉下时,它都会得到我构建镜像时的基础镜像,对吗?(这似乎很明显,但我需要检查)
2. 如果我注意到(网络挂钩,触发器?)有一个更新的版本,microsoft/aspnet:4.6.2我可以docker build再次运行命令并且更新的图像会被拉下吗?请记住,旧的基本映像在我的文件系统中(称为相同)。Docker 是否足够聪明,能够意识到我拥有该基础映像的旧版本并且它会下载它的最新版本?

希望我说清楚了

4

3 回答 3

3

您下载的图像将始终保持不变。图像依赖于特定来为图像提供 SHA256 校验和。修改父层将修改用于引用图像的校验和,从而成为新图像。该图像更改的唯一方法是,如果图像被标记引用并且本地标记发生更改,手动或再次拉动图像标记。

docker build默认情况下将首先使用本地图像。您要么需要docker build --pull单独运行,docker pull要么需要docker rmi IMAGE构建使用最新的标记图像。

Docker Hub构建服务具有构建功能,可在Hub 中更新任何指定映像时自动重新构建。

于 2017-11-22T01:56:39.687 回答
2

如果您需要最新发布的基础镜像,请在 docker build 期间使用 --no-cache 选项,否则 docker 将始终使用本地可用的镜像,除非您在 docker build 后进行清理

于 2017-11-22T02:48:16.237 回答
1
  1. 是的。(在内部它使用IMAGE ID,而不是名称来引用基本图像)
  2. IIRC 默认情况下并不聪明。(里面有个--pull开关docker build
于 2017-11-22T01:56:47.260 回答