1

我的 Dockerfile 包含这一行:

COPY --from=whatwg/wattsi:latest /whatwg/wattsi/bin/wattsi /bin/wattsi

whatwg/wattsi即,它正在从Docker Hub 上可用的映像中复制可执行文件。这基本上直接来自多阶段构建的文档。

但是,一旦我运行 Dockerfile,它就会缓存whatwg/wattsi:latest. 然后,任何whatwg/wattsi被推送到 Docker Hub 的后续更新都将被忽略,并使用缓存的副本。(即,这整行被跳过,它创建的层被重用。)

我想要的行为是让 Docker 将远程whatwg/wattsi:latest与本地缓存副本进行比较,如果有差异则重新下载。那可能吗?

我想在不将版本硬编码到我的 Dockerfile 的情况下做到这一点,每次revswhatwg/wattsi都需要更新该版本。whatwg/wattsi

4

2 回答 2

1

无法在 dockerfile 中编写它。

但是你可以运行

docker build --pull

从文档

--pull始终尝试拉取更新版本的映像 https://docs.docker.com/engine/reference/commandline/build/#options

和跑步一样

docker pull whatwg/wattsi:latest

在你的docker build. 它只是检查您的本地映像副本是否是最新的,如果不是,则拉取较新的版本。

这个问题不仅存在于构建,而且存在于运行它们。Kubernetes 通过imagePullPolicy. (见https://kubernetes.io/docs/concepts/containers/images/#updating-images

于 2020-06-17T15:12:17.643 回答
1

docker build有一个--pull选项“总是尝试拉取更新版本的图像”。

第一次构建(没有缓存)

Step 2/2 : COPY --from=whatwg/wattsi:latest /whatwg/wattsi/bin/wattsi /bin/watt
latest: Pulling from whatwg/wattsi
24f0c933cbef: Pull complete 
69e2f037cdb3: Pull complete 
4f7407c4e0dc: Pull complete 
Digest: sha256:f555e4ff56b88313c7c47ca86b83367f9c1ca93552c477a96b9943e907bb7733
Status: Downloaded newer image for whatwg/wattsi:latest
 ---> 2ca5d7a1e784

第二次构建(使用缓存)

Step 2/2 : COPY --from=whatwg/wattsi:latest /whatwg/wattsi/bin/wattsi /bin/watt
 ---> Using cache
 ---> 2ca5d7a1e784

第三次构建--pull(检查更新)

Step 2/2 : COPY --from=whatwg/wattsi:latest /whatwg/wattsi/bin/wattsi /bin/watt
latest: Pulling from whatwg/wattsi
Digest: sha256:f555e4ff56b88313c7c47ca86b83367f9c1ca93552c477a96b9943e907bb7733
Status: Image is up to date for whatwg/wattsi:latest
 ---> 7d3390252ae1
于 2020-06-17T15:09:27.863 回答