首页 > 解决方案 > .NET Core 3 应用程序在 Docker 映像上部署时无法连接到数据库

问题描述

我有一个 .Net Core 3.0 项目,自从我从 Core 2.2 升级到 Core 3.0 以来,我一直试图将它部署到一个似乎无法连接到数据库上下文的 docker 容器。我可以很好地在本地运行项目,但是当它部署到 Docker 容器时,应用程序在我调用 my 的第一个实例处挂起context,这恰好在 my 的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 Connection Timeout 异常,因此它必须在尝试建立 SQL 连接之前发生。我的 docker 容器也不会抛出任何错误。

这是我的码头文件:

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因为整个项目在我的本地机器上运行良好。谢谢!

标签: c#docker.net-core

解决方案


推荐阅读