title: Error loading native library "/app/runtimes/linux/native/libgrpc_csharp_ext.x64.so - Grpc Core on Docker container
body: <p>I'm build a web API app using .NET core and gRPC for Csharp.</p>
  <p>In Local, It work verry well, but when I build container and run it on Docker Desktop, receive error when I call method:</p>
  <pre><code>System.IO.IOException: Error loading native library &quot;/app/runtimes/linux/native/libgrpc_csharp_ext.x64.so&quot;. Error loading shared library ld-linux-x86-64.so.2: No such file or directory (needed by /app/runtimes/linux/native/libgrpc_csharp_ext.x64.so)
     at Grpc.Core.Internal.UnmanagedLibrary..ctor(String[] libraryPathAlternatives)
     at Grpc.Core.Internal.NativeExtension.LoadUnmanagedLibrary()
     at Grpc.Core.Internal.NativeExtension.LoadNativeMethods()
     at Grpc.Core.Internal.NativeExtension..ctor()
     at Grpc.Core.Internal.NativeExtension.Get()
     at Grpc.Core.Internal.NativeMethods.Get()
     at Grpc.Core.GrpcEnvironment.GrpcNativeInit()
     at Grpc.Core.GrpcEnvironment..ctor()
     at Grpc.Core.GrpcEnvironment.AddRef()
     at Grpc.Core.Channel..ctor(String target, ChannelCredentials credentials, IEnumerable`1 options)
     at Net.Core.Grpc.IPEndpointStrategy.SetCallInvokers(String serviceName, Boolean filterBlack)
     at Net.Core.Grpc.IPEndpointStrategy.Get(String serviceName)
     at Net.Core.Grpc.ClientCallInvoker.Call[TResponse](Func`2 call, Int32 retryLeft)
     at Net.Core.Grpc.ClientCallInvoker.AsyncUnaryCall[TRequest,TResponse](Method`2 method, String host, CallOptions options, TRequest request)
     at Grpc.Core.Interceptors.InterceptingCallInvoker.&lt;AsyncUnaryCall&gt;b__4_0[TRequest,TResponse](TRequest req, ClientInterceptorContext`2 ctx)
     at Grpc.Core.ClientBase.ClientBaseConfiguration.ClientBaseConfigurationInterceptor.AsyncUnaryCall[TRequest,TResponse](TRequest request, ClientInterceptorContext`2 context, AsyncUnaryCallContinuation`2 continuation)
     at Grpc.Core.Interceptors.InterceptingCallInvoker.AsyncUnaryCall[TRequest,TResponse](Method`2 method, String host, CallOptions options, TRequest request)
     at INRES.Service.Category.GetAllDvhcService.GetAllDvhcServiceClient.GetAllDvhcAsync(GetAllDvhcRequest request, CallOptions options)
     at INRES.Service.Category.GetAllDvhcService.GetAllDvhcServiceClient.GetAllDvhcAsync(GetAllDvhcRequest request, Metadata headers, Nullable`1 deadline, CancellationToken cancellationToken)
     at iNRES.Service.Meteorology.Domain.QueryHandlers.TramkttvQueryHandler.Handle(GetTramkttvQuery request, CancellationToken cancellationToken) in /app/src/iNRES.Service.Meteorology/Domain/QueryHandlers/TramkttvQueryHandler.cs:line 66
     at MediatR.Pipeline.RequestExceptionProcessorBehavior`2.Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate`1 next)
     at MediatR.Pipeline.RequestExceptionProcessorBehavior`2.Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate`1 next)
     at MediatR.Pipeline.RequestExceptionActionProcessorBehavior`2.Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate`1 next)
     at MediatR.Pipeline.RequestExceptionActionProcessorBehavior`2.Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate`1 next)
     at MediatR.Pipeline.RequestPostProcessorBehavior`2.Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate`1 next)
     at MediatR.Pipeline.RequestPreProcessorBehavior`2.Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate`1 next)
     at iNRES.Service.Meteorology.Controllers.BaseController.QueryAsync[TResult](IRequest`1 query) in /app/src/iNRES.Service.Meteorology/Controllers/BaseController.cs:line 45
     at iNRES.Service.Meteorology.Controllers.MtTramkttvController.GetById(Int32 id) in /app/src/iNRES.Service.Meteorology/Controllers/MtTramkttvController.cs:line 39
     at 
  </code></pre>
  <p>This is my Docker file:</p>
  <pre><code>FROM mcr.microsoft.com/dotnet/core/sdk:3.1-alpine AS build
  WORKDIR /app
  ARG sln=myproject.sln
  ARG service=src/myproject
  ARG configuration=Release
  COPY ${sln} ./
  COPY ./${service} ./${service}/
  COPY ./${tests} ./${tests}/
  RUN apk update &amp;&amp; apk add libc6-compat
  RUN dotnet restore /property:Configuration=${configuration}
  COPY . ./
  RUN dotnet publish ${service} -c ${configuration} -o out
  FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-alpine as runtime
  RUN echo 'http://dl-cdn.alpinelinux.org/alpine/v3.8/main' &gt;&gt; /etc/apk/repositories &amp;&amp; apk update --no-cache &amp;&amp; apk add --no-cache bash libc6-compat=1.1.19-r11
  WORKDIR /app
  COPY --from=build /app/${service}/${configuration}/out .
  ENV ASPNETCORE_URLS http://*:5000
  ENV ASPNETCORE_ENVIRONMENT docker
  EXPOSE 5000
  ENTRYPOINT dotnet myproject.dll
  </code></pre>