M1 docker 预览和 keycloak“图像平台 (linux/amd64) 与检测到的主机平台 (linux/arm64/v8) 不匹配”问题

Pet*_*ang 5 macos docker keycloak apple-m1

我刚刚下载了 Docker Preview v3.1 https://docs.docker.com/docker-for-mac/apple-m1/并尝试运行 keycloak。

还有其他人遇到这个问题吗?

docker run -p 8080:8080 -e KEYCLOAK_USER=admin -e KEYCLOAK_PASSWORD=admin quay.io/keycloak/keycloak:12.0.4
WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested
Run Code Online (Sandbox Code Playgroud)

小智 321

您可以尝试在构建 docker 镜像时添加此内容

--platform linux/amd64
Run Code Online (Sandbox Code Playgroud)

https://github.com/google/cadvisor/issues/2763

https://github.com/Y2Data

  • 确保将其放在“docker run”之后、图像名称之前。 (65认同)
  • 对于使用 docker-compose 的用户,您可以将“platform: linux/amd64”添加到“docker-compose.yml”中受影响的映像中 (12认同)
  • 如果您要在 M1 Mac 上构建要在 Linux 上使用的映像,请使用“--platform linux/amd64”构建适用于 Intel 芯片的版本。 (6认同)
  • 如果我在 M1 Mac 上构建映像以在 M1 Mac 上运行怎么办?就像为什么它仍然不起作用? (3认同)

Ale*_*shi 47

将这个片段添加到您的~/.zshrcand中~/.bashrc。它允许您在执行命令时不重复该标志docker run

# useful only for Mac OS Silicon M1, 
# still working but useless for the other platforms
docker() {
 if [[ `uname -m` == "arm64" ]] && [[ "$1" == "run" || "$1" == "build" ]]; then
    /usr/local/bin/docker "$1" --platform linux/amd64 "${@:2}"
  else
     /usr/local/bin/docker "$@"
  fi
}
Run Code Online (Sandbox Code Playgroud)

  • 使用类似 `docker() { if ...; 之类的东西可能更干净。然后设置“$1”--platform linux/amd64“${@:2}”; 菲;命令泊坞窗“$@”;}` (2认同)

Ces*_*res 35

与 @li Etzyio 回复的答案类似,该错误告诉您用于在本地构建映像的平台与用于映像的平台不同。M1 计算机(可能还有其他计算机)会发生这种情况,因此,您要做的就是在命令--platform <PLATFORM_SPEC>中指定docker build,并将 替换<PLATFORM_SPEC>为错误告诉您的内容(在本例中为linux/arm64/v8)。

对我有用的还有设置这些环境变量:

export DOCKER_BUILDKIT=0                                                                                                                                                    
export COMPOSE_DOCKER_CLI_BUILD=0
export DOCKER_DEFAULT_PLATFORM=linux/amd64
Run Code Online (Sandbox Code Playgroud)

如果您不想--platform每次运行构建命令时都传递该标志。


Chr*_*row 29

在使用 M1 的 Mac 上,您需要在 Docker Desktop 中启用 Rosetta(设置 > 开发中的功能)。Rosetta 是适用于 Mac 芯片的动态二进制翻译器,允许将 x86 指令翻译为 ARM 指令。

在此输入图像描述

然后,您可以通过设置以下环境变量来指定默认的 Docker 构建配置(注意 - 仅当您希望所有Docker 容器都使用它作为默认平台时才执行此操作):

export DOCKER_DEFAULT_PLATFORM=linux/amd64

当您下次运行 Docker 构建时,它将使用它作为图像的默认平台,并且启用 Rosetta 后它现在应该可以工作。

请参阅 - https://collabnix.com/warning-the-requested-images-platform-linux-amd64-does-not-match-the-Detected-host-platform-linux-arm64-v8/

  • 这适用于 Mac M2,在运行 Docker Desktop v4.26.0 时也有效。但“使用 Rosetta...”选项现在位于“常规”选项卡中。 (3认同)

pgl*_*zen 22

如果您在 M1 Mac 上运行 Docker Workstation,则可以利用Docker Workstation 多 CPU 架构支持,其中包括buildx 命令。它允许您为不同的 CPU 创建映像。

要在 M1 Mac 工作站上构建 Linux/AMD/Intel 映像,请运行以下命令。

docker buildx build --platform=linux/amd64 -t myorg/mytag:1.0.0 .
Run Code Online (Sandbox Code Playgroud)

放在docker buildx前面用 BuildKit 启动命令。有关详细信息,请参阅上面的链接。

  • 谢谢!这帮助我将在 M1 mac 上构建的映像部署到 https://labs.play-with-docker.com/ (2认同)

Gio*_*ous 8

在 M1 机器上构建镜像时,以下方法可以解决这个问题:

docker build -t <image-name> --platform linux/x86_64
Run Code Online (Sandbox Code Playgroud)


Pet*_*ang 6

刚刚找到这个帖子:https : //github.com/docker/for-mac/issues/5310#issuecomment-779791882

使用此图像,我现在可以启动 keycloak。 https://hub.docker.com/r/wizzn/keycloak

  • 我尝试过这个。设置 docker 实验功能“使用新的虚拟化框架”(Big Sur 而不是虚拟机管理程序)后即可工作。 (2认同)

Shi*_*amy 5

在 docker 桌面中设置“Use Rosetta for x86/amd64 emulation on Apple Silicon”配置帮助我解决了这个问题 - Docker 设置