【问题标题】:Function runtime unreachable Docker Azure函数运行时无法访问 Docker Azure
【发布时间】:2022-01-28 20:02:01
【问题描述】:

我们正在尝试使用 Azure 函数(HTTP 触发器)来触发 Dockerfile 中的 Java 可执行文件 (JAR)。我们能够使用 VSCode 在本地构建、标记和运行映像。但是,当我们将其推送到 Azure 时,我们会收到函数运行时无法访问的错误。

日志显示:

'容器没有响应端口 4444 或 8080 上的 http ping'

我们尝试了以下方法:

  • 44448080 添加了WEBSITES_PORT
  • 我们还在 Dockerfile 中一次公开一个端口,同时推送它。
  • 我们将WEBSITES_CONTAINER_START_TIME_LIMIT 的值更改为1800 和其他值,但均未成功。

部署中心日志显示 docker 镜像已成功拉取的消息:

INFO - Pull Image successful, Time taken: 0 Minutes and 0 Seconds 
INFO - Starting container for site 
INFO - docker run -d -p 8080:8080 --name xxxx -e DOCKER_CUSTOM_IMAGE_NAME=notreal.azurecr.io/xxxx -e WEBSITES_ENABLE_APP_SERVICE_STORAGE=false -e WEBSITES_PORT=8080 -e WEBSITE_SITE_NAME=xxxx -e WEBSITE_AUTH_ENABLED=False -e WEBSITE_ROLE_INSTANCE_ID=0 -e WEBSITE_HOSTNAME=xxxx.azurewebsites.net -e WEBSITE_INSTANCE_ID=abcdef abcdef.azurecr.io/xxxx 
INFO - Logging is not enabled for this container. Please use https://aka.ms/linux-diagnostics to enable logging to see container logs here. 
INFO - Initiating warmup request to container xxxx for site xxxx 
INFO - Waiting for response to warmup request for container xxxx. Elapsed time = 15.5217224 sec 
INFO - Waiting for response to warmup request for container xxxx. Elapsed time = 107.7627672 sec 
ERROR - Container xxxx for site xxxx is not running, failing site start 
ERROR - Container xxxx didn't respond to HTTP pings on port: 8080, failing site start. See container logs for debugging.

我们查看了 Stack Overflow 上的大量示例,但还没有解决这个问题。

【问题讨论】:

  • 您的 SCM 是否已启动并运行?您能否确认您与存储帐户的连接配置是否正确?
  • 嗨,是的,我已确保 scm 正在运行(假设您指的是在左侧刀片上选择高级工具然后单击“开始”时打开的站点。我还确保存储帐户已正确连接。我什至刚刚旋转了存储帐户的密钥,然后更新了功能应用程序中的配置设置以匹配新旋转的密钥。不幸的是,仍然收到与我原来的帖子相同的端口/ping错误.

标签: java docker azure-functions runtime-error azure-http-trigger


【解决方案1】:

Web/Function App for Containers 只允许您expose 一个端口 到外部世界。您的容器仅侦听单个端口上的 HTTP 请求。您的某些应用程序需要多个端口。例如,您可能有一个用于向应用发出请求的端口和一个用于仪表板或管理门户的单独端口。

您已经在应用设置中为 WEBSITES_PORT 配置了端口值。

在您的自定义映像中,您可以使用 80 以外的端口。因此,您需要使用 WEBSITES_PORT 应用设置将 Azure 配置为您的自定义容器可以使用的端口。

如果您的应用使用不同的端口 - 在 Dockerfile 中使用 EXPOSE 指令。它将公开适当的端口,例如:(8080) 并使用 WEBSITES_PORT 应用程序设置作为 Azure 上相同的端口值 8080 到 expose that port

在 Dockerfile 中添加 EXPOSE 指令。

EXPOSE 8080

参考here

【讨论】:

  • 我编辑了 Dockerfile 以包含一个 EXPOSE 8080 命令,构建了映像,在本地运行它,然后将其推送到 Azure。推送后,我创建了函数应用程序,然后为 8080 添加了 WEBSITES_PORT 设置。这不起作用,所以我编辑了 Dockerfile 以更改为 EXPOSE 4444,按照与之前相同的过程,然后将配置设置 WEBSITES_PORT 编辑为4444. 根据我所做的研究,我尝试了其他端口,但我得到的是,无论我在 Dockerfile 中公开什么端口,我都会添加一个 WEBSITES_PORT 设置以匹配该端口。
  • 我曾经使用上述技术解决了这个问题。请您可以通过一次流和端口。
猜你喜欢
  • 2017-01-06
  • 2021-09-17
  • 2017-09-07
  • 1970-01-01
  • 1970-01-01
  • 2019-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多