gpt4 book ai didi

docker - 如何连接 Dockerized ASP.NET Core 应用程序 ->Dockerized PostgreSQL?

转载 作者:行者123 更新时间:2023-12-02 18:50:21 26 4
gpt4 key购买 nike

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

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
如果我将应用程序连接到外部非 dockerized PostgreSQL - 它工作正常。
什么是不正确的以及如何解决?
有我的 docker-compose 文件
https://pastebin.com/b8FbHSLL

最佳答案

所以,localhost这里指的是运行网络服务器的容器的本地主机,而不是你的本地主机。
因此你不能使用 localhost引用另一个容器,而不是先做一些与网络相关的事情。
有几种方法可以继续。由于您在评论中提到您正在使用 docker-compose,我建议如下:
使用docker-compose,联网比较简单,如果docker-compose.yml文件中包含了所有需要相互通信的服务,你可以用docker-compose up运行所有这些服务。 .如果您没有在 docker-compose 文件中指定任何特定的网络,docker-compose 会为所有包含的服务设置一个网络,这使得每个容器都可以通过使用与容器名称。
基本上,您可以然后替换 localhost使用您想要的服务的服务名称,即如果 postgres 在您的 docker-compose 文件中被称为“db”,您将替换 localhost:5451db:5432 .
如果您在 docker-compose 文件中指定自定义网络,则必须确保 web-server 和 postgres 使用相同的网络。
如果您需要使用 docker run 运行 webapp而不是 docker-compose up ,那么你需要包含一个 --network参数,以便它们使用相同的网络。
更多信息 here
编辑 : 更正的端口号。我们现在需要使用容器端口,而不是主机端口,正如@Adiii 在上面的评论中提到的。

关于docker - 如何连接 Dockerized ASP.NET Core 应用程序 ->Dockerized PostgreSQL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63132779/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com