Docker设置限制(restrict,fix)映像版本标记以仅拉(FROM)一个具体的主要发行版本号

时间:2018-09-27 20:27:49

标签: image docker updates semantic-versioning

如何在Dockerfile中编写FROM语句,以从特定的Major版本中获取最新映像。 假设有一个应用程序当前具有三个主要版本:v1.7,v2.5,v3.0.5,而我想始终拥有最新版本的映像v2。如果我输入Dockerfile语句:

String s = "Temperature: 98.6°F (37.0°C)";
String t = Pattern.compile("[^ -~]").matcher(s)
                  .replaceAll(r -> String.format("\\\\u%04x", (int) r.group().charAt(0)));
System.out.println(t);

然后我将获得构建版本3.0.5,因为它是最新版本。如果我放:

FROM imagename:latest

然后我将获得准确的2.5版,但是一旦2.6版可用,就无法使用此语句更新映像。

如何设置FROM语句,该语句将始终获得最新的版本2更新,而不会妨碍向后兼容性并坚持使用该主要版本2。

1 个答案:

答案 0 :(得分:0)

Docker映像标签(包括Dockerfile FROM行和docker run映像)始终是完全匹配的。必然的结果是,一旦Docker相信它在本地有一个特定的映像,除非明确指示,否则它不会尝试再次获取它。

许多常见的Docker映像都有一个约定,即在多个标签下发布同一映像,这反映了您的建议。例如,在撰写本文时,对于standard python imagepython:latestpython:3python:3.7python:3.7.0python:3.7.0-stretch,它们都指向相同的图像。如果您说FROM python:3,则会得到这张图片。但是,如果您已经拥有该映像,并且发布了Python 3.8,并且在未先显式执行docker pull的情况下进行了重建,则您将使用已经拥有的映像(Python 3.7)。如果您做了docker pull python:3,则将获得更新的图像,但必须知道要这样做(或告诉CI工具为您完成)。