Spring 应用服务上的容器需要很长时间才能启动

Spring Container on App Service takes a long time to start

我正在尝试将 OpenJDK 映像上的 spring 启动 docker 容器部署到 Azure 上的应用程序服务中。让我感到困惑的是网络应用程序在初始 运行 时的时间(仅在初始 运行 期间)。我还在KUDU控制台看到容器启动不到6秒,APP服务运行超过200秒就失败了。请参阅随附的屏幕截图。有人以前遇到过这个问题吗?

编辑 1:添加 Docker 文件

FROM openjdk:11-jre-slim
LABEL Maintainer="Aravind"
VOLUME /tmp
ENV SSH_PASSWD "root:Docker!"
RUN echo "root:Docker!" | chpasswd

RUN apt-get update && apt-get install -y curl && apt-get     install -y --no-install-recommends dialog && apt-get install -y  --no-install-recommends openssh-server && apt install sudo
RUN useradd -m -d /home/spring spring && usermod -a -G spring spring

COPY sshd_config /etc/ssh/

RUN mkdir -p /tmp
COPY ssh_setup.sh /tmp
RUN chmod +x /tmp/ssh_setup.sh \
 && (sleep 1;/tmp/ssh_setup.sh 2>&1 > /dev/null)
COPY init.sh /usr/local/bin/

RUN chmod u+x /usr/local/bin/init.sh

EXPOSE 8000 2222
CMD ["/usr/sbin/sshd", "-D"]
USER spring:spring
ARG DEPENDENCY=/workspace/app/target/dependency
COPY --from=build ${DEPENDENCY}/BOOT-INF/lib /app/lib
COPY --from=build ${DEPENDENCY}/META-INF /app/META-INF
COPY --from=build ${DEPENDENCY}/BOOT-INF/classes /app
EXPOSE 8080:8080
USER root:root
ENTRYPOINT ["init.sh"]

经过长时间的研究和 MS 支持的帮助,终于找到了问题所在。正如我之前所说,它与容器的启动方式无关,因为容器启动时间不到 6 秒。 我们注意到的问题是,当由于 HTTP health-check 超时而导致启动失败时,应用程序将以端口 80 作为侦听端口启动。成功后,它以端口 8080 启动。

Spring-Boot默认监听端口为8080,修复方式为APP服务手动添加配置

App Setting Name:  WEBSITES_PORT
Value:             8080

上面的配置似乎已经解决了这个问题,现在开始的时间是应用服务中的docker容器所花费的时间。