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

Forcing docker to use linux/amd64 platform by default on macOS

当前的测试版 docker 要求您每次需要 buildrun amd64 image/container 时指定 --platform=linux/amd64

文档提到

When running an image with multi-architecture support, docker will automatically select an image variant which matches your OS and architecture.

文档没有指定使用环境变量改变这种自动行为的方法。它似乎同时忽略了 BUILDPLATFORM 和 TARGETPLATFORM。

是否有任何其他方法强制 docker 到 运行 所有 buildrun 命令与平台 linux/amd64 而不是 linux/arm64/v8 在 macOS 上默认 运行在 apple-silicon 上设置?

可以设置环境变量DOCKER_DEFAULT_PLATFORM

export DOCKER_DEFAULT_PLATFORM=linux/amd64  

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

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

export DOCKER_DEFAULT_PLATFORM=linux/amd64

或者,在 Docker 文件中,在 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  

您不需要像其中一个答案中提到的那样导出 env 变量,您可以 运行 通过执行以下操作将其作为命令的一部分一次:

DOCKER_DEFAULT_PLATFORM=linux/amd64 docker-compose build

请记住,如果您已经为不同的平台下载了图像,docker 将继续使用该图像,无论您将哪个平台指定为默认平台,您将使用 [= 删除该图像11=] 首先解决这个问题。

您可以使用支持平台cli的buildx (mobi)。

docker buildx build --platform linux/amd64 .