【Azure Function】Function App启动时出现 Failed to open local port 4001 错误,这是什么情况呢?

简介: 【Azure Function】Function App启动时出现 Failed to open local port 4001 错误,这是什么情况呢?

问题描述

在使用Azure Function时,启用了多个槽(slot),方便在部署生产环境的时候直接切换。

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated",
    "Schedule_Timer": "*/30 * * * * *"
  }
}

在使用C#进程外模式( dotnet-isolated )分别部署了生产槽和预生产槽后,发现预生产槽的Function启动日志中,由警告错误端口启用的消息:

ExtensionWarningEvent -- Failed to open local port 4001. This was attempt #1 to open a local port.

对比可以正常运行的生产槽日志,就是

[Information] Opened local gRPC endpoint: http://localhost:4001. InstanceId: . Function: . HubName:fun001slot. AppName: fun001. SlotName: 2ndslot. ExtensionVersion: 2.13.0. SequenceNumber: 0.

这个4001端口,是什么情况呢?

 

问题解答

端口 4001 用于与进程外模式(dotnet-isolated)的 gRPC 进程间通信的。

Function在运行的时候,会首先尝试绑定到 4001端口,因此它可能在大多数情况下都能正常绑定。但是,当该端口被占用时,它将开始尝试获取 30000 - 31000 范围内的随机端口。继续查看Failed to open local port 4001之后的日志,就可以发现它第二次尝试的时候,已经改变端口并绑定成功。

1)Failed to open local port 4001. This was attempt #1 to open a local port.. InstanceId: . Function: . HubName: fun001slot. AppName: fun001. SlotName: 2ndslot. ExtensionVersion: 2.13.0. SequenceNumber: 0.

2)Opened local gRPC endpoint: http://localhost:30721. InstanceId: . Function: . HubName: fun001slot. AppName: fun001. SlotName: 2ndslot. ExtensionVersion: 2.13.0. SequenceNumber: 1.

 

所以,这个错误只是一个警告。并不会影响Funciton的正常运行。

 

参考资料

Change Grpc port #145 : https://github.com/microsoft/durabletask-dotnet/issues/145

The functions extension code will first attempt to bind to 4001, so it may work for you most of the time. But when that port is reserved it will start trying to get random ports in the 30000 to 31000 range.  

相关文章
|
2月前
|
Java 应用服务中间件 API
【App Service】部署War包到Azure云上遇404错误
Java应用部署至Azure App Service for Windows后报404,本地运行正常。经排查,日志提示类文件版本不兼容:应用由Java 17(class file version 61.0)编译,但环境仅支持到Java 11(55.0)。错误根源为Java版本不匹配。调整App Service的Java版本至17后问题解决,成功访问接口。
178 1
|
2月前
|
存储 Linux 网络安全
【Azure App Service】Root CA on App Service
Azure App Service for Windows应用连接外部SSL服务时,需确保其证书由受信任的根CA颁发。多租户环境下无法修改根证书,但ASE(单租户)可加载自定义CA证书。若遇证书信任问题,可更换为公共CA证书或将应用部署于ASE并导入私有CA证书。通过Kudu的PowerShell(Windows)或SSH(Linux)可查看当前受信任的根证书列表。
110 13
|
3月前
|
API 网络架构 容器
【Azure Container App】查看当前 Container App Environment 中的 CPU 使用情况的API
在扩展 Azure Container Apps 副本时,因 Container App Environment 的 CPU 核心数已达上限(500 cores),导致扩展失败。本文介绍如何使用 `az rest` 命令调用 Azure China Cloud 管理 API,查询当前环境的 CPU 使用情况,并提供具体操作步骤及示例。
157 16
|
3月前
|
数据安全/隐私保护
【Azure Function App】PowerShell Function 执行 Get-AzAccessToken 的返回值类型问题:System.String 与 System.Security.SecureString
将PowerShell Function部署到Azure Function App后,Get-AzAccessToken返回值类型在不同环境中有差异。正常为SecureString类型,但部分情况下为System.String类型,导致后续处理出错。解决方法是在profile.ps1中设置环境变量$env:AZUREPS_OUTPUT_PLAINTEXT_AZACCESSTOKEN=false,以禁用明文输出。
144 0
|
8月前
|
人工智能 Python
083_类_对象_成员方法_method_函数_function_isinstance
本内容主要讲解Python中的数据类型与面向对象基础。回顾了变量类型(如字符串`str`和整型`int`)及其相互转换,探讨了加法在不同类型中的表现。通过超市商品分类比喻,引出“类型”概念,并深入解析类(class)与对象(object)的关系,例如具体橘子是橘子类的实例。还介绍了`isinstance`函数判断类型、`type`与`help`探索类型属性,以及`str`和`int`的不同方法。最终总结类是抽象类型,对象是其实例,不同类型的对象有独特运算和方法,为后续学习埋下伏笔。
184 7
083_类_对象_成员方法_method_函数_function_isinstance
|
8月前
|
Python
[oeasy]python086方法_method_函数_function_区别
本文详细解析了Python中方法(method)与函数(function)的区别。通过回顾列表操作如`append`,以及随机模块的使用,介绍了方法作为类的成员需要通过实例调用的特点。对比内建函数如`print`和`input`,它们无需对象即可直接调用。总结指出方法需基于对象调用且包含`self`参数,而函数独立存在无需`self`。最后提供了学习资源链接,方便进一步探索。
226 17
|
8月前
|
人工智能 Python
[oeasy]python083_类_对象_成员方法_method_函数_function_isinstance
本文介绍了Python中类、对象、成员方法及函数的概念。通过超市商品分类的例子,形象地解释了“类型”的概念,如整型(int)和字符串(str)是两种不同的数据类型。整型对象支持数字求和,字符串对象支持拼接。使用`isinstance`函数可以判断对象是否属于特定类型,例如判断变量是否为整型。此外,还探讨了面向对象编程(OOP)与面向过程编程的区别,并简要介绍了`type`和`help`函数的用法。最后总结指出,不同类型的对象有不同的运算和方法,如字符串有`find`和`index`方法,而整型没有。更多内容可参考文末提供的蓝桥、GitHub和Gitee链接。
227 11
|
JavaScript
箭头函数与普通函数(function)的区别
箭头函数是ES6引入的新特性,与传统函数相比,它有更简洁的语法,且没有自己的this、arguments、super或new.target绑定,而是继承自外层作用域。箭头函数不适用于构造函数,不能使用new关键字调用。
|
数据可视化 开发者 索引
详解Wireshark LUA插件函数:function p_myproto.dissector(buffer, pinfo, tree)
在 Wireshark 中,LUA 插件通过 `function p_myproto.dissector(buffer, pinfo, tree)` 扩展协议解析能力,解析自定义应用层协议。参数 `buffer` 是 `PacketBuffer` 类型,表示原始数据包内容;`pinfo` 是 `ProtoInfo` 类型,包含数据包元信息(如 IP 地址、协议类型等);`tree` 是
679 1

热门文章

最新文章