Приложение .NET Core 3 не может подключиться к базе данных при развертывании в образе Docker - PullRequest
1 голос
/ 04 октября 2019

У меня есть проект .Net Core 3.0, который я пытался развернуть в док-контейнере, который, кажется, не может соединиться с контекстом базы данных с тех пор, как я обновил Core 2.2 до Core 3.0. Я могу нормально запустить проект локально, но когда он развернут в контейнере Docker, приложение зависает при первом вызове, когда я вызываю мой context, что происходит в моем методе main() в моем Program.cs:

    public static void Main(string[] args)
    {
        IHost host = CreateHostBuilder(args).Build();

        using (IServiceScope scope = host.Services.CreateScope())
        {
            IServiceProvider services = scope.ServiceProvider;

            try
            {
                VideoContext context = services.GetRequiredService<VideoContext>();
                // my project never makes it past the following line:
                context.Database.Migrate();
                SeedData.Initialize(services);
            }
            catch (Exception e)
            {
                Console.WriteLine("error");
                IErrorLogService logger = services.GetRequiredService<IErrorLogService>();
                logger.LogError(e);
            }
        }

        host.Run();
    }  

Приложение будет зависать бесконечно и никогда не преодолеет метод context.Database.Migrate(). Даже не возникает исключение тайм-аута соединения SQL, поэтому оно должно быть чем-то еще до того, как оно попытается установить соединение SQL. Мой докер-контейнер тоже не выдает никаких ошибок.

Вот мой докер-файл:

FROM mcr.microsoft.com/dotnet/core/sdk:3.0.100 AS build-env
WORKDIR /app

# Copy csproj and restore as distinct layers
COPY *.csproj ./
RUN dotnet restore

# Copy everything else and build
COPY . ./
RUN dotnet publish -c Release -o out

# Build runtime image
FROM mcr.microsoft.com/dotnet/core/aspnet:3.0.0
WORKDIR /app
# Make sure this folder exists
RUN mkdir -p /app/PrivateAssets/Attachments
COPY --from=build-env /app/out .
COPY secrets.json /root/.microsoft/usersecrets/44EFF06F-8817-4BCE-9CD3-872D7E944C3D/secrets.json
EXPOSE 80
ENTRYPOINT ["dotnet", "JPLTube.dll"]

Есть идеи, почему мое приложение зависает на неопределенное время? Пожалуйста, дайте мне знать, есть ли другие файлы, необходимые для отладки. Я подумал, что единственное, что нужно, это dockerfile, потому что весь проект работает на моей локальной машине. Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...