我刚刚切换到新的 Macbook Pro M2,我正在尝试使用 openjdk8 和 sbt 1.3.8 为 Scala Play 应用程序构建 docker 映像。我跑
docker buildx build --platform linux/amd64 -t image-name
这就是我的 dockerfile 的样子:
FROM openjdk:8
# Env variables
ENV SCALA_VERSION 2.13.0
ENV SBT_VERSION 1.3.8
ENV APP_NAME somebackend-api
ENV APP_VERSION 1.0-SNAPSHOT
# Install Scala
## Piping curl directly in tar
RUN \
curl -fsL https://downloads.typesafe.com/scala/$SCALA_VERSION/scala-$SCALA_VERSION.tgz | tar xfz - -C /root/ && \
echo >> /root/.bashrc && \
echo "export PATH=~/scala-$SCALA_VERSION/bin:$PATH" >> /root/.bashrc
# Install sbt
RUN \
curl -L -o sbt-$SBT_VERSION.deb https://repo.scala-sbt.org/scalasbt/debian/sbt-$SBT_VERSION.deb && \
dpkg -i sbt-$SBT_VERSION.deb && \
rm sbt-$SBT_VERSION.deb && \
apt-get update && \
apt-get install sbt && \
sbt sbtVersion
# Define working directory
WORKDIR /root
ENV PROJECT_HOME /usr/src
COPY ["build.sbt", "/tmp/build/"]
COPY ["project/plugins.sbt", "project/build.properties", "/tmp/build/project/"]
RUN cd /tmp/build && \
sbt update && \
sbt compile
RUN mkdir -p $PROJECT_HOME/app
WORKDIR $PROJECT_HOME/app
COPY . $PROJECT_HOME/app
RUN sbt dist
EXPOSE 9000
RUN unzip target/universal/$APP_NAME-$APP_VERSION.zip
RUN chmod +x $APP_NAME-$APP_VERSION/bin/$APP_NAME
ENTRYPOINT $APP_NAME-$APP_VERSION/bin/$APP_NAME
通常,构建会在 sbt 编译时无限期地挂起。
我应该注意,我必须为 linux/amd64 构建它,因为它被部署到 GKE 上的 x86_64 机器上
有人知道解决这个问题的正确方法吗?提前感谢任何帮助。
为另一个平台构建镜像是一个坏主意。不过,如果您喜欢冒险的话,还有一个解决方法:
docker buildx create --use
创建一个新的构建器实例。这允许您在docker buildx build --platform linux/amd64,linux/arm64 --push -t <tag_to_push> .