强制 docker 在 macOS 上默认使用 linux/amd64 平台

新手上路,请多包涵

当前的 docker 测试版要求您在每次需要 buildrun amd64 映像/容器时指定一个 --platform=linux/amd64

文档提到

当运行具有多架构支持的映像时,docker 将 自动 选择与您的操作系统和架构匹配的映像变体。

该文档未指定使用 env 变量更改此 自动 行为的方法。它似乎忽略了 BUILDPLATFORM 和 TARGETPLATFORM。

Is there any other way to force docker to run all build and run commands with a platform linux/amd64 instead of linux/arm64/v8 默认情况下在苹果硅上运行的 macOS 上?

原文由 Vojtech Letal 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 3.5k
2 个回答

可以设置环境变量 DOCKER_DEFAULT_PLATFORM

 export DOCKER_DEFAULT_PLATFORM=linux/amd64

原文由 Beppe C 发布,翻译遵循 CC BY-SA 4.0 许可协议

使用 Apple Silicon(或其他基于 ARM64 的架构)构建的 Docker 镜像在将镜像部署到基于 Linux 或 Windows 的 AMD64 环境(例如 AWS EC2、ECS 等)时可能会产生问题。例如,您可以尝试上传您制作的 docker 镜像在 M1 芯片上复制到 AWS ECR 存储库,但它无法运行。因此,您需要一种在 ARM64 架构上构建基于 AMD64 的图像的方法,无论是使用 Docker build(用于单个图像)还是 docker-compose build(例如,用于在 docker compose 网络中运行的多图像应用程序)。

对于构建单个 docker 映像:使用命令行设置您的环境变量或修改您的 .bashrc.zshenv 文件,如接受的答案中所建议的那样。

 export DOCKER_DEFAULT_PLATFORM=linux/amd64

或者,在 Dockerfile 中,在 FROM 命令中包含以下标志(对于多阶段 Dockerfile 构建,该标志仅在第一阶段需要):

 FROM --platform=linux/amd64 python:3.7-alpine

要将映像构建为 docker-compose 构建的一部分,请为每个服务包括 platform: linux/amd64 。例如:

 services:
  frontend:
    platform: linux/amd64
    build: frontend
    ports:
      - 80:80
    depends_on:
      - backend
  backend:
    platform: linux/amd64
    build: backend

原文由 WildGoose 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进