我正在尝试将 --platform=linux/amd64 标志添加到我的 dockerfile 的 FROM 语句中。我需要这样做,因为我正在使用 m1 笔记本电脑,并且默认架构 (linux/arm64/v8) 与我们的产品机器不兼容。整行应该是:
FROM --platform=linux/amd64 openjdk:11-jre-slim
这对于我的前端存储库(以节点作为基础映像)效果很好。但是,在后端存储库中,我收到此错误:
<name chain> expected, got '-'
所以这就像,出于某种原因根本不让我添加标志。
IntelliJ IDEA,Java
完整后端dockerfile:
FROM --platform=linux/amd64 openjdk:11-jre-slim
COPY config/dev.yml /opt/dropwizard/
COPY build/libs/smerge-1.0-SNAPSHOT-all.jar /opt/dropwizard/
EXPOSE 8080
WORKDIR /opt/dropwizard
CMD ["java", "-jar", "smerge-1.0-SNAPSHOT-all.jar", "server", "dev.yml"]
dockerfiles 的 --platform 标志上的 docker 文档 说:
可选的 --platform 标志可用于指定映像的平台,以防 FROM 引用多平台映像。例如,linux/amd64、linux/arm64 或 windows/amd64。默认情况下,使用构建请求的目标平台。
在 Mac 上,我将此行添加到 .zprofile 中,这样可以立即处理所有事情。对我来说,将其添加到 .zprofile 可以确保访问终端时 DOCKER_DEFAULT_PLATFORM 存在于环境中。
导出 DOCKER_DEFAULT_PLATFORM=linux/amd64
此外,我使用此 cmd 从 Apple Silicon MacBook 构建 docker 映像。
docker build --platform=linux/amd64 -t mydockerimage .
无需构建
一时兴起,我将其放入我的 Dockerfile 中
FROM --platform=linux/amd64 php:5.6-apache
我在 Docker Desktop 中关闭了 Rosetta 并构建了它,它工作得很好。 通过这种方式,您可以根据每个图像进行设置,因为它速度较慢。 我不确定为什么在为 amd64 构建时它会抱怨 Rosetta,但我猜这与运行 amd64 程序不太一样。