Проблема не специфична для .NET Core - она действительно касается запуска gRPC на Alpine. Собственные библиотеки gRPC (которые используются Grpc.Core) созданы на основе glibc, который по умолчанию отсутствует в Alpine.
Команда gRPC имеет обходной путь для этого, включен в их тестсборка с использованием версии glibc, созданной для Alpine . Я не могу ручаться за это, кроме как сказать, что это сработало в моем тестировании. Вполне вероятно, что это настолько близко к "поддерживаемому", насколько вероятно будет gRPC на Alpine.
Используемый мной Dockerfile начинается следующим образом:
FROM mcr.microsoft.com/dotnet/core/aspnet:3.0.0-alpine3.9
RUN apk update && apk --no-cache add ca-certificates wget
RUN wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub
RUN wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.30-r0/glibc-2.30-r0.apk
RUN apk add glibc-2.30-r0.apk
... без установки libc6-compat
или шага символической ссылки. После этого вы сможете использовать оставшуюся часть Dockerfile, как и раньше. Обратите внимание, что здесь используется Alpine 3.9 - тег всего лишь 3.0.0-alpine
не работал, когда я его пробовал.
С поддержкой gRPC в .NET Core 3.0, возможно , что когда мы обновили наши библиотеки до Grpc.Core 2.x , вместо этого вы могли бы использовать клиентскую библиотеку Microsoft gRPC ... но есть некоторые аспекты Grpc.Core, которых в настоящее время нетподдерживается этим, и я не ожидаю, что мы сможем значительно облегчить использование версии Microsoft (хотя мы действительно хотим попробовать).