【问题标题】:Docker build for varying architectures with same base image not workingDocker 为具有相同基础映像的不同架构构建不工作
【发布时间】: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:arm7name:amd64 等?
  • 我不确定我是否可以,因为 Pyhton 容器是一个自动拉取的中间容器。
  • 我认为@SoftwareEngineer 考虑过为不同类型的架构以不同的方式命名您的图像,即docker build --platform linux/arm/v7 --force-rm -t localhost:5000/ImageName:arm7docker build --platform linux/arm/v7 --force-rm -t localhost:5000/ImageName:amd64
  • 另外,你知道吗:stackoverflow.com/questions/59365141/… -- 我不认为这是重复的,只是你需要了解的东西
  • 图像实际上是由 device-ip 命名的。所以他们是不同的。只是这个问题不清楚。我遇到的问题是我无法管理它们的中间图像。

标签: docker


【解决方案1】:

对我来说解决这个问题的唯一方法是在 dockerfile 中包含 Python 图像的摘要:

AMD64:

FROM python:3.8@sha256:7a9aaef601387a8d5ae320243a8295412e43f9a2ca6d36594d3489418b44417a

或 ARM/V7:

FROM python:3.8@sha256:45fbccbc4681e8d9ef517d43f9d0eb8f17b2beac00b0f9697bbf85354ae8a266

在这种情况下,Dockerfile 不是通用的,但您可以在同一主机上同时为不同平台创建具有相同基础镜像的镜像。

【讨论】:

  • 这是解决方案,我试图使用 Ubuntu 作为基础映像来构建我的应用程序的 ARM 版本,它正在拉取 amd64 版本。从 Dockerhub 很容易找到 Ubuntu 映像的 arm64 摘要。此外,您还可以将 SHA256 摘要作为 --build-arg 传递,从而构建正确的版本平台相关性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-20
  • 2017-05-03
相关资源
最近更新 更多