【发布时间】:2026-01-19 22:50:01
【问题描述】:
情况: 将 Hangfire 与 Asp.net core 2.1 和 Docker 一起使用。
应用程序在 docker 运行时崩溃。当我评论所有与 Hangfire,应用运行良好。
如果我在 Visual Studio 上通过 IIS express 运行应用程序,应用程序工作正常
使用 Hangfire。
问题:
Application startup exception: System.Exception: Cannot connect to SQL Server Browser. Ensure SQL Server Browser has been started. ---> System.Net.Internals.SocketExceptionFactory+ExtendedSocketException: No such device or address
\\\\\\\\\\\\\\\\\\\\\\
\\\\\\\\\\\\\\\\\\\\\\\
at Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngine.GetService(Type serviceType)
at Microsoft.Extensions.DependencyInjection.ServiceProvider.GetService(Type serviceType)
at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetService[T](IServiceProvider provider)
at Hangfire.HangfireApplicationBuilderExtensions.ThrowIfNotConfigured(IApplicationBuilder app)
at Hangfire.HangfireApplicationBuilderExtensions.UseHangfireServer(IApplicationBuilder app, BackgroundJobServerOptions options, IEnumerable`1 additionalProcesses, JobStorage storage)
appsettings.json 上的连接字符串:
"ConnectionStrings": {
"TestDB": "Server=[server_instance]\\LOCALHOST;database=[db1];uid=[user];pwd=[pwd]",
"HangfireDB": "Server=[server_instance]\\LOCALHOST;database=Hangfire;uid=[user];pwd=[pwd]"
},
知道为什么会这样吗? 谢谢
【问题讨论】:
-
您是否在与应用程序相同的容器中运行数据库?如果不是,则应用程序必须属于同一网络才能相互通信,如果您的数据库也是 dockerized。请注意,默认情况下,您无法从 docker guest 连接到 docker 主机(如果您的数据库在 docker 主机上运行)。请提供有关您的设置的更多信息
-
@Tseng,是的,你是对的。我的数据库在 docker 主机上运行。这就是为什么它不起作用。有什么办法可以访问数据库吗?假设在生产 AWS 上,我的应用程序在 ECS 容器上运行,而我的数据库在 EC2 上,ECS 实例将如何连接到 EC2?
-
不建议 docker 容器直接连接到主机(尽管可以通过将“主机”网络添加到容器来启用它。如果您的数据库在主机之外,并且通常可以通过公共(或内部IP)应该没问题。因此,如果您的数据库直接托管在AWS中,那么您应该使用它的IP和连接字符串进行连接。对于本地开发,您应该将您的数据库放在一个容器中并将两个容器放入同一个网络(即使用 docker compose 或类似的)
-
@Tseng,非常感谢朋友。
标签: docker asp.net-core hangfire asp.net-core-2.1