M1 docker preview and keycloak 'image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8)' 问题

M1 docker preview and keycloak 'image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8)' Issue

我刚刚下载了 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

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

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

你可以尝试添加这个

--platform linux/amd64

来自

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

https://github.com/Y2Data

将此片段添加到您的 ~/.zshrc~/.bashrc。它允许您在执行 docker run 命令时不重复标记:

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

对我来说,错误发生是因为我在 M1 芯片 Macbook 上构建 docker 图像,并试图在 Linux 机器上 运行 图像。

这对我有用:

使用需要 运行 它的同一台机器构建 docker 图像,并且成功了。

在 M1 运行 上 image。适合我。

docker run -d -p 8080:8080 -e KEYCLOAK_USER=admin -e KEYCLOAK_PASSWORD=admin wizzn/keycloak:14

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

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

export DOCKER_BUILDKIT=0                                                                                                                                                    
export COMPOSE_DOCKER_CLI_BUILD=0
export DOCKER_DEFAULT_PLATFORM=linux/amd64

如果你不想传递标志 --platform every-time 你 运行 构建命令。

我遇到这个问题是因为在我的 Dockerfile 中我使用了不支持 arm64 的 FROM java:8

我通过 运行 以下命令修复它:

docker pull openjdk

然后将我的 Dockerfile 更改为

FROM openjdk:latest

如果您 运行 Docker M1 mac 上的工作站,您可以利用 Docker Workstation multi-CPU architecture support, which includes the buildx command。它允许您为不同的 CPU 创建映像。

要在您的 M1 mac 工作站上构建 Linux/AMD/Intel 映像,运行 以下内容。

docker buildx build --platform=linux/amd64 -t myorg/mytag:1.0.0 .

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