【发布时间】:2021-07-18 12:10:39
【问题描述】:
我在 Micronaut 中构建了一个 API,并尝试在其中部署 GCP Cloud Run 作为原生 graalVM 映像
这是我的Dockerfile
# Stage 1: Build the JAR
FROM gradle:jdk11 as gradle
COPY --chown=gradle . /home/app
WORKDIR /home/app
RUN gradle assemble --no-daemon
# Stage 2: Build the native image
FROM ghcr.io/graalvm/graalvm-ce:latest as graalvm
RUN \
# Install GraalVM Native Image
gu install native-image;
COPY --from=gradle /home/app/build/libs/greetings-cloud-run-0.1-all.jar /home/app/server.jar
WORKDIR /home/app
RUN native-image -H:Name=greetings-cloud-run --no-server -cp server.jar com.arun.Application
# Stage 3: Prepare Server
FROM frolvlad/alpine-glibc
RUN apk update && apk add libstdc++
EXPOSE 8080
COPY --from=graalvm /home/app/greetings-cloud-run .
ENTRYPOINT ["./greetings-cloud-run"]
我检查到第 2 阶段,原生映像运行得非常好。我包含 Stage-3 来运行我的原生映像并最终出现以下错误
$ docker run a/micro
./greetings-cloud-run: /usr/lib/libstdc++.so.6: no version information available (required by ./greetings-cloud-run)
./greetings-cloud-run: Relink `/usr/lib/libgcc_s.so.1' with `/usr/glibc-compat/lib/libc.so.6' for IFUNC symbol `memset'
需要有关如何运行我的原生映像的帮助
【问题讨论】:
-
如果您愿意切换基础镜像,可以尝试使用Red Hat distoless UBI for quarkus-native。
-
谢谢 .. 我的基于 Micronaut 而不是 quarkus
-
这应该没关系。
-
啊好的。所以你的意思是,我可以为我的第 3 阶段提供这张图片?
-
是的。
RUN apk ...可以删除,而可以添加USER nonroot(请参阅quarkus documentation on distoless base images)。休息应该按原样工作。
标签: linux docker micronaut graalvm graalvm-native-image