【问题标题】:Cloud Run: deploying spring docker image causing error; Failed to start and then listen on the port defined by the PORT environment variableCloud Run:部署 spring docker 镜像导致错误;无法启动并监听 PORT 环境变量定义的端口
【发布时间】:2021-07-26 10:48:48
【问题描述】:

我正在尝试将存储在 Docker Registry 中的 Spring Boot Docker 映像部署到 Cloud Run。
但是,当我部署映像时,我得到了错误;

Cloud Run error: Container failed to start. Failed to start and then listen on the port defined by the PORT environment variable. Logs for this revision might contain more information.

我知道这可能是由端口和地址设置引起的,所以我参考the official doc 修复了这些部分,但仍然遇到相同的错误。具体来说,我在 application.yml 上将这些设置如下。

server:
  port: ${PORT:8080}
  address: ${ADDRESS:localhost}

我知道 PORT 变量将由 Cloud Run 传递(在我的例子中,端口号在 Cloud Run 上设置为 8080)。还有ADDRESS会自己传给我(值为0.0.0.0,参考the official doc)。

供参考,下面是我构建spring boot docker镜像的Dockerfile;

# Stage1 - execute build process
FROM openjdk:14-jdk-alpine as build_process
WORKDIR /back_end
COPY . .
RUN ./gradlew build -x test

# Stage2 - boot app with the build output above
FROM openjdk:14-jdk-alpine
EXPOSE ${PORT}
COPY --from=build_process /back_end/build/libs/back_end-0.0.1-SNAPSHOT.jar ./app.jar
RUN adduser -D user
USER user
ENTRYPOINT ["sh","-c","java -jar app.jar"]

任何帮助将不胜感激。非常感谢您的阅读!

【问题讨论】:

  • 你确定地址是0.0.0.0吗?如果是本地主机,它将无法工作
  • 在 application.yml 中,我设置为“服务器:地址:${ADDRESS:localhost}”并将ADDRESS env 变量作为“0.0.0.0”作为 Cloud Run 修订版的 env 变量传递,所以我相信应该设置为“0.0.0.0”。我会检查这种方式是否可以设置服务器地址,以防万一。
  • 不应该只是${ADDRESS}吗?
  • 您在 Cloud Logging 中有哪些信息?
  • 致莱莫斯;我也试过了,但是没用……

标签: spring-boot docker google-cloud-platform google-cloud-run google-container-registry


【解决方案1】:

我弄明白了为什么我的 docker 映像未能通过 Cloud Run 的运行状况检查。毕竟不是端口和IP地址的问题,而是健康检查过程执行的时机。
部署映像后,运行状况检查过程似乎立即开始,尽管我的情况是在部署到 Cloud Run 后启动 Spring Boot Tomcat 服务器花了将近 30 秒。
这导致健康检查过程失败,所以我也修复了立即启动tomcat服务器的设置,从而解决了我发布的问题。

【讨论】:

    猜你喜欢
    • 2021-11-10
    • 2021-10-07
    • 2021-05-13
    • 2021-11-10
    • 2021-05-24
    • 2019-09-03
    • 2022-01-12
    • 2022-12-01
    • 2021-06-13
    相关资源
    最近更新 更多