【发布时间】:2022-04-27 16:23:33
【问题描述】:
在我的系统中,我需要为具有不同架构的不同设备创建大量图像。为此,我有一个管道,它在 Docker 中使用 Docker 创建多个图像,所有图像都基于一个 Python:3.8 图像,但适用于不同的架构。 在 Docker 文件中,我一般指定基础镜像:
FROM python:3.8
在构建命令中,我指定了特定设备的架构:
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 声明图像,因为应该在不同的设备上使用相同的代码。
解决或解决此问题的最佳方法是什么?
【问题讨论】:
-
您是否尝试过使用不同的标签?
name:arm7和name:amd64等? -
我不确定我是否可以,因为 Pyhton 容器是一个自动拉取的中间容器。
-
我认为@SoftwareEngineer 考虑过为不同类型的架构以不同的方式命名您的图像,即
docker build --platform linux/arm/v7 --force-rm -t localhost:5000/ImageName:arm7和docker build --platform linux/arm/v7 --force-rm -t localhost:5000/ImageName:amd64。 -
另外,你知道吗:stackoverflow.com/questions/59365141/… -- 我不认为这是重复的,只是你需要了解的东西
-
图像实际上是由 device-ip 命名的。所以他们是不同的。只是这个问题不清楚。我遇到的问题是我无法管理它们的中间图像。
标签: docker