如何让docker撰写并拉取新图像?

如何让docker撰写并拉取新图像?,docker,caching,dockerfile,Docker,Caching,Dockerfile,我在FROM语句的Dockerfile中使用latest标记: # Dockerfile FROM registry.website.com/base-image:latest 每次我的最新版本更改时,我都需要重新提取该图像 不幸的是,docker只接受缓存版本 我试过了 docker compose build--无缓存 及 docker组装--构建--强制重新创建项目 但它总是这样: > docker-compose up --build --force-recreate proje

我在
FROM
语句的
Dockerfile
中使用
latest
标记:

# Dockerfile
FROM registry.website.com/base-image:latest
每次我的
最新版本更改时,我都需要重新提取该图像

不幸的是,docker只接受缓存版本

我试过了

docker compose build--无缓存

docker组装--构建--强制重新创建项目

但它总是这样:

> docker-compose up --build --force-recreate project
Building project
Step 1/12 : FROM registry.website.com/base-image:latest
 ---> e2a0bcaf3dd7

知道为什么它不工作吗?

好的,一个不太好的手动解决方案如下:

docker image rm registry.website.com/base image


希望有人有一个
docker compose
解决方案。

这是
docker run
和类似命令的默认行为:如果您还没有图像,它会拉取图像,但如果已经拉取,它会假定您已经拥有的图像是正确的。在这种情况下,由于图像没有直接列在
docker compose.yml
文件中,因此没有很多快捷方式;你可以写一些像

sed-ne的@^来自\(.*/*\)@\1@p| xargs docker pull
从行中提取
中列出的所有内容,但不提取多阶段构建的基础图像(图像名称必须包含斜杠);那可能太过分了

我看到了一些避免使用
latest
标签的建议;这是几个主要原因之一(您也无法控制预打包软件的主要版本,并且无法在多主机设置上获得一致的部署)。如果你有一个持续的集成设置来建立你经常改变的图像,你可以考虑用日期戳或构建ID来标记它,并将它从行中放入<代码>中。您可以尝试使其更具可配置性,并最终返回到环境变量

我猜不管发生什么,您都可能会得到一个shell脚本包装器,如果您使用的是
最新版本,它可能看起来就像

#/垃圾箱/垃圾箱
set-e
docker pull registry.website.com/base image:latest
docker build-t。
docker compose up-d

我想您正在寻找:


因此,
docker compose pull和&docker compose up应该做您想做的事情,而不需要不断地将缓存或硬代码容器名称擦除到您的compose文件之外

要重新提取基本图像并重新构建,请运行:

docker-compose build --pull

有关更多信息,请参阅。

很棒的帖子!很多想法我都想跟进。谢谢这怎么不是公认的答案?完全符合问题的要求。谢谢它不符合作者的要求。它提取服务的映像,但不提取Dockerfiles中指定的基本映像
docker-compose build --pull