微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

绕过 Docker 架构镜像规范的快速简便方法?

如何解决绕过 Docker 架构镜像规范的快速简便方法?

几个月前我们改用 Docker 的原因之一是消除了使用我们最新的工具维护虚拟机等的需要。认为 Docker 会更容易,只需简单地拉下镜像并开始使用.但是,最近变得很痛苦。

不能在 Windows VM 中运行(因为缺乏嵌套 VM 支持并且需要数天的故障排除),让它在 RHEL 中运行变得非常痛苦(有人说 Docker 和 RHEL 不能很好地协同工作),现在我遇到了 RaspBerry Pi 4 的平台支持问题。

当我尝试在 RaspBerry Pi 4 上运行我的容器时,它现在告诉我容器的架构与主机的架构不匹配。

WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm/v7) and no specific platform was requested

有点令人困惑,因为我希望 Docker 能够为我们提供更多的灵活性和与客户平台的兼容性,但这似乎很痛苦。

据我了解,我们必须重新构建整个容器并将 arm 容器推送到 arm 系统,并将 amd64 推送到其他系统?

是否有一种快速而肮脏的解决方法可以用来让容器运行并忽略架构?

解决方法

共享 vs.简单标签

要间接解决您提到的问题,您可以使用多平台的 shared tag。您可以看到差异 here

示例:

  • “简单标签”使 docker run mongo:4.0-xenial 能够在单一平台(在 mongo:4.0-xenial 的情况下为 Linux)上跨架构“做正确的事”。
  • “共享标签”使 docker run mongo:4.0 大致可以在 Linux 和支持的各种不同版本的 Windows 上运行

力平台

为了直接解决您提到的问题,此警告之前曾发生在其他人身上。查看以下bitwarden docker discussion。解决方法是在使用 docker run 时强制平台,如下所示:

docker run --platform linux/arm64 image_name_or_id

确保在图像名称/id 之前定义了 --platform 参数。

构建多平台镜像

  1. docker run --platform 参数已添加 probably here 但未添加到文档中!它在您运行 docker run --help
  2. 时显示

平台字符串:如果服务器支持多平台,则设置平台

  1. Multi-Platform Docker Builds
  2. buildx

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。