Ron*_*Ron 12 caching docker dockerfile
latest我Dockerfile在FROM声明中使用了标签:
# Dockerfile
FROM registry.website.com/base-image:latest
Run Code Online (Sandbox Code Playgroud)
每次我的latest版本更改时,我都需要重新拉出该图像。
不幸的是,docker 只采用缓存版本。
我试过
docker-compose build --no-cache
和
docker-compose up --build --force-recreate project
但它看起来总是这样:
> docker-compose up --build --force-recreate project
Building project
Step 1/12 : FROM registry.website.com/base-image:latest
---> e2a0bcaf3dd7
Run Code Online (Sandbox Code Playgroud)
任何想法为什么它不起作用?
Kri*_*ass 19
我认为您正在寻找docker-compose pull:
$ docker-compose help pull
Pulls images for services defined in a Compose file, but does not start the containers.
Run Code Online (Sandbox Code Playgroud)
所以docker-compose pull && docker-compose up应该做你想做的事,而不需要在你的撰写文件之外不断擦除你的缓存或硬编码容器名称
这是类似命令的默认行为docker run:如果您还没有图像,它将拉取图像,但如果您这样做了,它会假设您已经拥有的图像是正确的。在这种情况下,由于图像没有直接列在docker-compose.yml文件中,因此您没有很多快捷方式;你可以编写类似的脚本
sed -ne 's@^FROM \(.*/.*\)@\1@p' | xargs docker pull
Run Code Online (Sandbox Code Playgroud)
提取一行中列出的所有内容FROM,但不提取多阶段构建的基础映像(映像名称必须包含斜杠);这可能有点矫枉过正了。
我看到了一些避免使用latest标签的建议;这是几个重要原因之一(您也无法控制预打包软件的主要版本,并且无法在多主机设置上获得一致的部署)。如果您有一个持续集成设置来构建经常更改的映像,您可以考虑使用日期戳或构建 ID 来标记它,并将其放入行中FROM。您可以使用 anARG使其更具可配置性,并将其通过 from 传递docker-compose.yml,最终返回到环境变量。
我猜你可能最终会得到一个 shell 脚本包装器,无论如何,如果你设置了版本,latest它可能看起来像
#!/bin/sh
set -e
docker pull registry.website.com/base-image:latest
docker build -t ... .
docker-compose up -d
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11647 次 |
| 最近记录: |