如何让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