如何解决绕过 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
参数。
构建多平台镜像
- docker run
--platform
参数已添加 probably here 但未添加到文档中!它在您运行docker run --help
时显示
平台字符串:如果服务器支持多平台,则设置平台
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。