在 macOS 上默认强制 docker 使用 linux/amd64 平台
Forcing docker to use linux/amd64 platform by default on macOS
当前的测试版 docker 要求您每次需要 build
或 run
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
到 运行 所有 build
和 run
命令与平台 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 .
当前的测试版 docker 要求您每次需要 build
或 run
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
到 运行 所有 build
和 run
命令与平台 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 .