Quarkus 部署到 Google Cloud App Engine 失败
Quarkus deployment to Google Cloud App engine fails
我正在尝试将一个简单的单端点 quarkus 应用程序部署到 Google Cloud -> App Engine flex 环境。根据 documentation
,我设法将 uber-jar 部署到标准环境
但是我正在努力使用 flex 环境进行部署,正如我从与上面相同的文档 link 所低估的那样,GCP 将基于 Dockerfile 创建一个 docker 容器;最后,我的目的是将本机映像部署到 GCP App Engine。
我按照上面 link 中的步骤操作:
复制JVM Dockerfile到你项目的根目录:cp src/main/docker/Dockerfile.jvm Dockerfile
使用 mvn clean package 构建您的应用程序
src/main/appengine/app.yaml 有以下内容:
runtime: custom
env: flex
gcloud 应用部署
gcloud 日志returns同样的错误,对于原生和普通docker文件,分别为:
starting build "502dd964-0abf-470e-a4c1-44c89a67a96e"
FETCHSOURCE
Fetching storage object: gs://staging.os-xxxx-quarkus.appspot.com/eu.gcr.io/os-xxxx-quarkus/appengine/default.20210322t183731:latest#1616431057582767
Copying gs://staging.os-xxxx-quarkus.appspot.com/eu.gcr.io/os-xxxx-quarkus/appengine/default.20210322t183731:latest#1616431057582767...
/ [0 files][ 0.0 B/ 230.0 B]
/ [1 files][ 230.0 B/ 230.0 B]
Operation completed over 1 objects/230.0 B.
BUILD
Already have image (with digest): gcr.io/cloud-builders/docker
unable to prepare context: unable to evaluate symlinks in Dockerfile path: lstat /Users: no such file or directory
ERROR
ERROR: build step 0 "gcr.io/cloud-builders/docker" failed: step exited with non-zero status: 1
为简洁起见,我将包括 docker 文件,但它是默认生成的,没有任何更改。
FROM registry.access.redhat.com/ubi8/ubi-minimal:8.3
ARG JAVA_PACKAGE=java-11-openjdk-headless
ARG RUN_JAVA_VERSION=1.3.8
ENV LANG='en_US.UTF-8' LANGUAGE='en_US:en'
# Install java and the run-java script
# Also set up permissions for user `1001`
RUN microdnf install curl ca-certificates ${JAVA_PACKAGE} \
&& microdnf update \
&& microdnf clean all \
&& mkdir /deployments \
&& chown 1001 /deployments \
&& chmod "g+rwX" /deployments \
&& chown 1001:root /deployments \
&& curl https://repo1.maven.org/maven2/io/fabric8/run-java-sh/${RUN_JAVA_VERSION}/run-java-sh-${RUN_JAVA_VERSION}-sh.sh -o /deployments/run-java.sh \
&& chown 1001 /deployments/run-java.sh \
&& chmod 540 /deployments/run-java.sh \
&& echo "securerandom.source=file:/dev/urandom" >> /etc/alternatives/jre/lib/security/java.security
# Configure the JAVA_OPTIONS, you can add -XshowSettings:vm to also display the heap size.
ENV JAVA_OPTIONS="-Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager"
# We make four distinct layers so if there are application changes the library layers can be re-used
COPY --chown=1001 target/quarkus-app/lib/ /deployments/lib/
COPY --chown=1001 target/quarkus-app/*.jar /deployments/
COPY --chown=1001 target/quarkus-app/app/ /deployments/app/
COPY --chown=1001 target/quarkus-app/quarkus/ /deployments/quarkus/
EXPOSE 8080
USER 1001
ENTRYPOINT [ "/deployments/run-java.sh" ]
感谢您的宝贵时间
看来我犯了一个令人尴尬的错误而污染了 space;对于 Google Cloud App Engine flex 环境,app.yaml 文件应放在根文件夹中;它也被记录在案
此外,由于某些原因,max_num_instances
应明确设置为最大值 8,根据帐户配额 google documentation 否则将引发 EXAHUSTED_RESOURCE
异常。
我正在尝试将一个简单的单端点 quarkus 应用程序部署到 Google Cloud -> App Engine flex 环境。根据 documentation
,我设法将 uber-jar 部署到标准环境但是我正在努力使用 flex 环境进行部署,正如我从与上面相同的文档 link 所低估的那样,GCP 将基于 Dockerfile 创建一个 docker 容器;最后,我的目的是将本机映像部署到 GCP App Engine。
我按照上面 link 中的步骤操作:
复制JVM Dockerfile到你项目的根目录:cp src/main/docker/Dockerfile.jvm Dockerfile
使用 mvn clean package 构建您的应用程序
src/main/appengine/app.yaml 有以下内容:
runtime: custom env: flex
gcloud 应用部署
gcloud 日志returns同样的错误,对于原生和普通docker文件,分别为:
starting build "502dd964-0abf-470e-a4c1-44c89a67a96e" FETCHSOURCE Fetching storage object: gs://staging.os-xxxx-quarkus.appspot.com/eu.gcr.io/os-xxxx-quarkus/appengine/default.20210322t183731:latest#1616431057582767 Copying gs://staging.os-xxxx-quarkus.appspot.com/eu.gcr.io/os-xxxx-quarkus/appengine/default.20210322t183731:latest#1616431057582767... / [0 files][ 0.0 B/ 230.0 B]
/ [1 files][ 230.0 B/ 230.0 B]
Operation completed over 1 objects/230.0 B.
BUILD Already have image (with digest): gcr.io/cloud-builders/docker unable to prepare context: unable to evaluate symlinks in Dockerfile path: lstat /Users: no such file or directory ERROR ERROR: build step 0 "gcr.io/cloud-builders/docker" failed: step exited with non-zero status: 1
为简洁起见,我将包括 docker 文件,但它是默认生成的,没有任何更改。
FROM registry.access.redhat.com/ubi8/ubi-minimal:8.3
ARG JAVA_PACKAGE=java-11-openjdk-headless
ARG RUN_JAVA_VERSION=1.3.8
ENV LANG='en_US.UTF-8' LANGUAGE='en_US:en'
# Install java and the run-java script
# Also set up permissions for user `1001`
RUN microdnf install curl ca-certificates ${JAVA_PACKAGE} \
&& microdnf update \
&& microdnf clean all \
&& mkdir /deployments \
&& chown 1001 /deployments \
&& chmod "g+rwX" /deployments \
&& chown 1001:root /deployments \
&& curl https://repo1.maven.org/maven2/io/fabric8/run-java-sh/${RUN_JAVA_VERSION}/run-java-sh-${RUN_JAVA_VERSION}-sh.sh -o /deployments/run-java.sh \
&& chown 1001 /deployments/run-java.sh \
&& chmod 540 /deployments/run-java.sh \
&& echo "securerandom.source=file:/dev/urandom" >> /etc/alternatives/jre/lib/security/java.security
# Configure the JAVA_OPTIONS, you can add -XshowSettings:vm to also display the heap size.
ENV JAVA_OPTIONS="-Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager"
# We make four distinct layers so if there are application changes the library layers can be re-used
COPY --chown=1001 target/quarkus-app/lib/ /deployments/lib/
COPY --chown=1001 target/quarkus-app/*.jar /deployments/
COPY --chown=1001 target/quarkus-app/app/ /deployments/app/
COPY --chown=1001 target/quarkus-app/quarkus/ /deployments/quarkus/
EXPOSE 8080
USER 1001
ENTRYPOINT [ "/deployments/run-java.sh" ]
感谢您的宝贵时间
看来我犯了一个令人尴尬的错误而污染了 space;对于 Google Cloud App Engine flex 环境,app.yaml 文件应放在根文件夹中;它也被记录在案
此外,由于某些原因,max_num_instances
应明确设置为最大值 8,根据帐户配额 google documentation 否则将引发 EXAHUSTED_RESOURCE
异常。