【问题标题】:the lister for function was unable to start. time trigger function函数列表器无法启动。时间触发功能
【发布时间】:2021-08-13 17:18:52
【问题描述】:

我有在本地工作的时间触发功能。我将解决方案构建到一个 docker 容器中。当我在本地启动图像时,它再次工作,但是当我在 windows server 2019 上启动图像时,我收到此错误:

 Microsoft.Azure.WebJobs.Host.Listeners.FunctionListenerException: The listener for function 'PlayerSummary' was unable to start.
 ---> Microsoft.Azure.Storage.StorageException: Name or service not known
 ---> System.Net.Http.HttpRequestException: Name or service not known
 ---> System.Net.Sockets.SocketException (0xFFFDFFFF): Name or service not known
   at System.Net.Http.ConnectHelper.ConnectAsync(String host, Int32 port, CancellationToken cancellationToken)
   --- End of inner exception stack trace ---
   at System.Net.Http.ConnectHelper.ConnectAsync(String host, Int32 port, CancellationToken cancellationToken)
   at System.Net.Http.HttpConnectionPool.ConnectAsync(HttpRequestMessage request, Boolean allowHttp2, CancellationToken cancellationToke
n)
   at System.Net.Http.HttpConnectionPool.CreateHttp11ConnectionAsync(HttpRequestMessage request, CancellationToken cancellationToken)
   at System.Net.Http.HttpConnectionPool.GetHttpConnectionAsync(HttpRequestMessage request, CancellationToken cancellationToken)
   at System.Net.Http.HttpConnectionPool.SendWithRetryAsync(HttpRequestMessage request, Boolean doRequestAuth, CancellationToken cancell
ationToken)
   at System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
   at System.Net.Http.HttpClient.FinishSendAsyncUnbuffered(Task`1 sendTask, HttpRequestMessage request, CancellationTokenSource cts, Boo
lean disposeCts)
   at Microsoft.Azure.Storage.Core.Executor.Executor.ExecuteAsync[T](RESTCommand`1 cmd, IRetryPolicy policy, OperationContext operationC
ontext, CancellationToken token)
   --- End of inner exception stack trace ---
   at Microsoft.Azure.Storage.Core.Executor.Executor.ExecuteAsync[T](RESTCommand`1 cmd, IRetryPolicy policy, OperationContext operationC
ontext, CancellationToken token)
   at Microsoft.Azure.WebJobs.Host.StorageBaseDistributedLockManager.TryAcquireLeaseAsync(CloudBlockBlob blob, TimeSpan leasePeriod, Str
ing proposedLeaseId, CancellationToken cancellationToken) in C:\projects\azure-webjobs-sdk-rqm4t\src\Microsoft.Azure.WebJobs.Host.Storag
e\Singleton\BlobLeaseDistributedLockManager.cs:line 133
   at Microsoft.Azure.WebJobs.Host.StorageBaseDistributedLockManager.TryLockAsync(String account, String lockId, String lockOwnerId, Str
ing proposedLeaseId, TimeSpan lockPeriod, CancellationToken cancellationToken) in C:\projects\azure-webjobs-sdk-rqm4t\src\Microsoft.Azur
e.WebJobs.Host.Storage\Singleton\BlobLeaseDistributedLockManager.cs:line 84
   at Microsoft.Azure.WebJobs.Host.SingletonManager.TryLockAsync(String lockId, String functionInstanceId, SingletonAttribute attribute,
 CancellationToken cancellationToken, Boolean retry) in C:\projects\azure-webjobs-sdk-rqm4t\src\Microsoft.Azure.WebJobs.Host\Singleton\S
ingletonManager.cs:line 113

我的函数调用如下所示:

[FunctionName(nameof(PlayerSummary))]
    public async Task PlayerSummary([TimerTrigger("*/15 * * * *")] TimerInfo myTimer,
        ILogger logger)
    {
        var endpoint = "https://example.com";
        var start = DateTime.UtcNow;
        var date = start.ToString(Format);
        var body = JsonConvert.SerializeObject(new Request
        {
            DateStart = date,
            DateEnd = date,
            WhiteLabels = [1, 2]
        });
        var request = new StringContent(
            body,
            Encoding.UTF8,
            "application/json");
        var responseBody = string.Empty;
        try
        {
            var response = await _client.PostAsync(endpoint, request);
            responseBody = await response.Content.ReadAsStringAsync();

            if (response.IsSuccessStatusCode)
            {
                var resultSet = JsonConvert.DeserializeObject<PlayerSummary[]>(responseBody);
                await _context.PlayerSummaries.AddOrUpdatePlayerAsync(resultSet);
                await _context.SaveChangesAsync();
                await _monitor.LogInfo(nameof(PlayerSummary), responseBody, start, DateTime.UtcNow);
            }
            else
            {
                await _monitor.LogWarning(nameof(PlayerSummary), body, responseBody, start, DateTime.UtcNow);
            }
        }
        catch (Exception e)
        {
            await _monitor.LogError(nameof(PlayerSummary), body, responseBody, start, e, e.Message);
            logger.LogError($"{nameof(PlayerSummary)} ERROR at {DateTime.UtcNow}: {e.Message}");
        }
        logger.LogInformation($"{nameof(PlayerSummary)} executed at: {DateTime.Now}");
    }

我的 Dockerfile 如下所示:

FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS installer-env

COPY . /src/ProgressPlay
RUN cd /src/ProgressPlay && \
    mkdir -p /home/site/wwwroot && \
    dotnet publish *.csproj --output /home/site/wwwroot

# To enable ssh & remote debugging on app service change the base image to the one below
# FROM mcr.microsoft.com/azure-functions/dotnet:3.0-appservice
FROM mcr.microsoft.com/azure-functions/dotnet:3.0
ENV AzureWebJobsScriptRoot=/home/site/wwwroot \
    AzureWebJobsStorage="UseDevelopmentStorage=true;DevelopmentStorageProxyUri=http://host.docker.internal" \
    AzureFunctionsJobHost__Logging__Console__IsEnabled=true

COPY --from=installer-env ["/home/site/wwwroot", "/home/site/wwwroot"]

我已检查并且我的存储模拟器正在运行

【问题讨论】:

    标签: docker azure-functions


    【解决方案1】:
    • 如果您的防火墙限制 func 访问存储帐户,则可能会报告此错误。防火墙是监听器无法访问虚拟存储模拟器的原因之一。

      在本地运行该函数时,除httptrigger外的所有触发器都需要使用存储模拟器。如果防火墙限制侦听器对虚拟存储的访问,则在执行功能时可能会出现问题。这就是使用 httptrigger 不会出错的原因,因为它不使用虚拟存储模拟器。

      尝试禁用防火墙,看看是否能解决问题。

    • 检查函数和存储模拟器是否在同一个驱动器上。

    安装 Azurite Emulator 并查看侦听器是否响应。下面是 Docker 命令

    docker pull mcr.microsoft.com/azure-storage/azurite
    

    这将帮助您运行 Azurite Image

    docker run -p 10000:10000 -p 10001:10001 -p 10002:10002 \
        mcr.microsoft.com/azure-storage/azurite
    

    更多采石场请查看Azurite Emulator

    同时检查在SO1SO2Github进行相同讨论的SO

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-17
      • 2021-09-30
      • 1970-01-01
      • 1970-01-01
      • 2020-11-02
      • 2013-10-28
      • 2021-07-04
      • 2021-05-23
      相关资源
      最近更新 更多