如何连接Dockerized ASP.NET Core app ->Dockerized PostgreSQL?



我有两个Docker:我的ASP。NET核心Web服务器-p 5001:80postgresql-p 5451:5432当我将Web服务器配置为使用在主机上运行的postgresql时,它就可以工作了。但是当我在Docker中运行configure myWeb App以使用postgresql时http://localhost:5001it

starts but then an error appears:
warn: Microsoft.AspNetCore.HttpsPolicy.HttpsRedirectionMiddleware[3]
Failed to determine the https port for redirect.
fail: Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware[1]
An unhandled exception has occurred while executing the request.
System.InvalidOperationException: An exception has been raised that is likely due to a transient failure.
---> Npgsql.NpgsqlException (0x80004005): Exception while connecting
---> System.Net.Internals.SocketExceptionFactory+ExtendedSocketException (99): Cannot assign requested address [::1]:5451

如果我将应用程序连接到一个外部的非码头化PostgreSQL,它会很好地工作。

什么是不正确的,如何修复?

有我的docker合成文件

https://pastebin.com/b8FbHSLL

因此,这里的localhost指的是运行Web服务器的容器的本地主机,而不是您的本地主机。因此,如果不先做一些与网络相关的事情,就不能使用localhost来引用另一个容器。

有几种方法可以继续。既然你在评论中提到你正在使用docker compose,我建议如下:

使用docker-compose,联网相对简单,如果所有需要相互通信的服务都包含在docker-compase.yml文件中,那么可以使用docker-compose up运行所有服务。如果您没有在docker compose文件中指定任何特定的网络,docker composes会为所有包含的服务设置一个单独的网络,这使得每个容器都可以通过使用与容器名称相同的主机名来访问其他容器。

基本上,您可以将localhost替换为您想要的服务的服务名称,即如果postgres被调用";db";在docker compose文件中,将localhost:5451替换为db:5432

如果您在docker compose文件中指定了自定义网络,那么您必须确保web服务器和postgres使用相同的网络。

如果需要使用docker run而不是docker-compose up运行Web应用程序,则需要包含--network参数,以便它们使用相同的网络。

更多信息点击这里

编辑:已更正端口号。我们现在需要使用集装箱端口,而不是主机端口,正如@Adiii在上面的评论中提到的那样。

最新更新