在我的系统中,我需要为不同架构的不同设备创建大量镜像。为此,我有一个在Docker中使用Docker创建多个镜像的管道,所有镜像都基于一个Python:3.8镜像,但用于不同的架构。在Docker文件中,我一般指定基本镜像:
FROM python:3.8在build命令中,我指定了特定设备的体系结构:
docker build --platform linux/arm/v7 --force-rm -t localhost:5000/ImageNameA
docker build --platform linux/amd64 --force-rm -t localhost:5000/ImageNameB我目前面临的问题是,当管道同时触发这两个构建时,Docker主机会与中间镜像混淆。Docker似乎不能存储不同架构的中间图像,因为它们只是摘要不同,相同的标记被覆盖。出于这个原因,docker似乎只通过名称和标签来选择中间图像,而不是通过与架构匹配的sha265:。这将导致以下错误:
failed to get destination image "sha256:4d470a81cd7a4eb2a886d8d6ca7848d66f711ea2d44375f4ab10a97c42c1adf3": image with reference sha256: 4d470a81cd7a4eb2a886d8d6ca7848d66f711ea2d44375f4ab10a97c42c1adf3 was found but does not match the specified platform: wanted linux/arm/v7, actual: linux/amd64此外,build命令中的--force-rm选项在这里不起作用,因为删除是在构建过程完成之后完成的。我也不想在dockerfile中声明带有@sha的图像,因为相同的代码应该在不同的设备上使用。
解决或解决此问题的最佳方法是什么?
发布于 2021-10-15 13:35:26
对我来说,解决这个问题的唯一方法是在dockerfile中包含Python图像的摘要:
AMD64:
FROM python:3.8@sha256:7a9aaef601387a8d5ae320243a8295412e43f9a2ca6d36594d3489418b44417a或ARM/V7:
FROM python:3.8@sha256:45fbccbc4681e8d9ef517d43f9d0eb8f17b2beac00b0f9697bbf85354ae8a266在这种情况下,Dockerfile不是通用的,但您可以在一台主机上同时为不同平台创建具有相同基础镜像的镜像。
这样也就不需要--force-rm标签了。
https://stackoverflow.com/questions/69537478
复制相似问题