1

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

日志显示:

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

我们尝试了以下方法:

  • WEBSITES_PORT4444和添加8080
  • 我们还在推送时在 Dockerfile 中一次公开了一个端口。
  • 我们更改了WEBSITES_CONTAINER_START_TIME_LIMITto的值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 上的许多示例,但还没有解决这个问题。

4

1 回答 1

0

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

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

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

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

在 Dockerfile 中添加 EXPOSE 指令。

EXPOSE 8080

参考这里

于 2022-01-31T09:17:51.167 回答