Docker SBT 构建卡在 M2 芯片上以部署到 GKE

问题描述 投票:0回答:1

我刚刚切换到新的 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 scala playframework sbt
1个回答
0
投票

为另一个平台构建镜像是一个坏主意。不过,如果您喜欢冒险的话,还有一个解决方法:

  • 打开 Docker Desktop 仪表板,然后打开首选项(齿轮图标)。转到“实验功能”,然后将其打开并应用
  • 接下来使用
    docker buildx create --use
    创建一个新的构建器实例。这允许您在
  • 指定多个 Docker 平台
  • 要为典型的 x86 系统和 Apple Silicon Mac 构建 Dockerfile,请运行
    docker buildx build --platform linux/amd64,linux/arm64 --push -t <tag_to_push> .
  • 完成。请注意,如果您希望 Docker Desktop 自动为您管理清单列表,则必须直接推送到存储库(这可能是您想要的)。阅读上面的段落找出原因。 😉

来源:Jaimyn Mayer 的博客

© www.soinside.com 2019 - 2024. All rights reserved.