c# - .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
因为整个项目在我的本地机器上运行良好。谢谢!
解决方案
推荐阅读
- javascript - Stringify MutationObserver 突变
- ios - SwiftUI:如何遍历 Cloud Firestore 集合中的文档并获取数据?
- node.js - ERR_HTTP_HEADERS_SENT:无法设置 cookie
- components - 使用 Fluent UI Northstar 嵌入网页
- python - 您如何将列表放入网络浏览器链接中?
- postgresql - 在 PostgreSQL 中对功能不够的执行权限?
- c++ - 从项目的外部依赖项中找出谁包含了标头
- kubernetes - 如何将多个 k8s 命名空间连接到同一个 PV?
- ios - 基于参数的 URL 解码模型的 Siesta Service configureTransformer
- stata - 无法在 Stata 中设置 maxvar