【问题标题】:Docker container not responding on azure web appDocker 容器在 Azure Web 应用程序上没有响应
【发布时间】:2020-06-16 05:32:02
【问题描述】:

我正在尝试使用 azure devops 管道在 azure linux Web 应用程序上部署和运行 Spring Boot 应用程序。该容器正在部署在 Web 应用程序上,但它在启动后没有响应运行状况检查。在部署中,az-pipeline yml 文件使用 Maven 构建的 jar 包然后构建镜像并推送到 ACR。 Webhook 将最新图像部署到 Web 应用。

错误

 - docker run -d -p 8440:8000 --name myapp-backend-dev_0_2b7b9f65 -e
   WEBSITE_CORS_ALLOWED_ORIGINS=* -e
   WEBSITE_CORS_SUPPORT_CREDENTIALS=False -e
   WEBSITES_ENABLE_APP_SERVICE_STORAGE=false -e WEBSITES_PORT=8000 -e
   WEBSITE_SITE_NAME=myapp-backend-dev -e WEBSITE_AUTH_ENABLED=False -e
   WEBSITE_ROLE_INSTANCE_ID=0 -e
   WEBSITE_HOSTNAME=myapp-backend-dev.azurewebsites.net -e
   WEBSITE_INSTANCE_ID=0d7eaa93ccf04e2494816f0f168f4e2170cd80b95a36687e39877b27289
   -e HTTP_LOGGING_ENABLED=1 myappdevacr.azurecr.io/dev:latest
   2. Starting container for site
   3. docker run -d -p 9268:8081 --name myapp-backend-dev_0_2b7b9f65_middleware -e
   WEBSITE_CORS_ALLOWED_ORIGINS=* -e
   WEBSITE_CORS_SUPPORT_CREDENTIALS=False -e
   WEBSITES_ENABLE_APP_SERVICE_STORAGE=false -e WEBSITES_PORT=8000 -e
   WEBSITE_SITE_NAME=myapp-backend-dev -e WEBSITE_AUTH_ENABLED=False -e
   WEBSITE_ROLE_INSTANCE_ID=0 -e
   WEBSITE_HOSTNAME=myapp-backend-dev.azurewebsites.net -e
   WEBSITE_INSTANCE_ID=0d7eaa93ccf04e2494816f0f168f4e2170cd80b95a36687e39877b27289
   -e HTTP_LOGGING_ENABLED=1 appsvc/middleware:1907112318 /Host.ListenUrl=http://0.0.0.0:8081
   /Host.DestinationHostUrl=http://172.16.1.2:8000
   /Host.UseFileLogging=true
   4. Container myapp_0_de5443dd didn't respond to HTTP pings on port: 8000, failing site start. See container logs for debugging.
   5. home/LogFiles/webssh/pm2.log (https://myapp.scm.azurewebsites.net/api/vfs/LogFiles/webssh/pm2.log)Host:
   undefinedwebssh2 Login: user=root from=127.0.0.1 host=undefined
   port=2222 sessionID=undefined allowreplay=undefinedHeaders:
   {"connection":"close","accept":"text/html, application/xhtml+xml,
   application/xml; q=0.9, /;
   q=0.8","accept-encoding":"br, gzip,
   deflate","accept-language":"en-gb","cookie":"ARRAffinity=0d7eaa93ccf04e2494816f0f168f4e2170cd80b95a36687e39877b2728981272","host":"127.0.0.1:3000","max-forwards":"10","referer":"https://myapp.scm.azurewebsites.net/","user-agent":"Mozilla/5.0
   (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/605.1.15 (KHTML, like
   Gecko) Version/12.1.2
   Safari/605.1.15","x-client-ip":"111.11.111.111","x-client-port":"57208","x-waws-unencoded-url":"/webssh/host","client-ip":"111.11.111.111:57208","x-arr-log-id":"SOMETHING-ee62-48cf-813a-724c9acb0ca0","disguised-host":"myapp.scm.azurewebsites.net","x-site-deployment-id":"myapp","was-default-hostname":"myapp.scm.azurewebsites.net","x-original-url":"/webssh/host","x-ms-client-principal-name":"EMAIL@SOMETHING.onmicrosoft.com","x-ms-client-display-name":"SOME
   NAME","x-forwarded-for":"111.11.111.111:57208","x-arr-ssl":"2048|256|C=US, S=Washington, L=Redmond, O=Microsoft Corporation, OU=Microsoft IT,
   CN=Microsoft IT TLS CA
   5|CN=*.azurewebsites.net","x-forwarded-proto":"https","x-appservice-proto":"https"}Host
   from file: 172.16.1.2DEBUG: Local ident:
   'SSH-2.0-ssh2js0.1.16'on.error - Error: connect ECONNREFUSED
   172.16.1.2:2222Status_WatchFile :: Error Error: ENOENT: no such file or directory, open '/appsvctmp/status.txt'

Dockerfile

FROM adoptopenjdk/openjdk11:ubi

ARG PROFILE
ENV spring.profiles.active=$PROFILE

ENV ACCEPT_EULA=Y ENV WEBSITES_PORT=8000 ENV WEBSITE_HTTPLOGGING_RETENTION_DAYS=7 ENV WEBSITES_CONTAINER_START_TIME_LIMIT=1800

ARG JAR_FILE=target/*.jar COPY ${JAR_FILE} app.jar

EXPOSE 8000 8000
ENTRYPOINT ["java","-jar","/app.jar"]

注意:已尝试由 Charles Xu 和 beerzy 在此 post 上提供的解决方案,但错误未解决。

【问题讨论】:

    标签: azure spring-boot docker azure-devops azure-web-app-service


    【解决方案1】:

    我可以从给定的信息中猜测 docker 命令在网络方面是不正确的。

    首先使用创建一个docker网络

    docker network create your_network_name

    然后使用

    将两个应用程序连接到同一个网络

    --network your_network_name

    如果外部不需要,则无需在外部公开任何端口,一旦应用程序启动,使用以下命令检查两者是否显示在您创建的网络中

    docker network your_network_name 检查

    如果您目前无法弄清楚我在说什么,请告诉我,我会相应地更新答案。

    【讨论】:

      【解决方案2】:

      您似乎正在尝试将 Java 11 应用程序作为 Linux Web 应用程序部署到 Azure 应用服务。为此,您可以直接将 jar 部署到 Web 应用程序,而无需构建 Docker 映像。这也将节省您维护 ACR 和配置网络挂钩的额外工作。

      有多种方法可以将您的应用程序部署到 Web 应用程序。由于您已经在管道中使用 Maven,因此最简单的方法是使用 azure-webapp-maven 插件将您的应用部署到 Azure 应用服务。详情请查看这篇文章:https://docs.microsoft.com/en-us/azure/java/spring-framework/deploy-spring-boot-java-app-with-maven-plugin。本文中的示例使用 Java 8。要使用 Java 11,请将 javaVersionwebContainer 更改为 java11 而不是 jre8。应用服务将自动在后台设置适当的 SERVER_PORT 环境变量,这样当您的 Spring Boot 应用程序启动时,它将开始侦听正确的端口(这是您最初的问题)。

      您可以在 pom.xml 的 <appSettings> 标记中使用 JAVA_OPTS 定义 Java 属性。有关示例,请参阅上面的文章。只需确保您没有将 server.port 属性设置为示例中提到的 80(我们将很快修复该示例)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-08-01
        • 1970-01-01
        • 2017-05-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多