引发了一个异常,可能是由于暂时性故障-将本地PostgreSQL连接到Docker容器

chhkpiq4  于 2023-04-11  发布在  Docker
关注(0)|答案(3)|浏览(195)

我试图从运行.net应用程序的Docker容器访问服务器上的PostgreSQL。我的Dockerfile包含以下环境变量:

ENV DB_DATABASE=db_name
ENV DB_USERNAME=db_username
ENV DB_PASSWORD=db_pw
ENV DB_HOST=public IP (not localhost!)
ENV DB_PORT=port (not the standard 5432)

在Startup.cs中,我这样构造连接字符串:

string host =  Environment.GetEnvironmentVariable("DB_HOST").ToString();
string port =  Environment.GetEnvironmentVariable("DB_PORT").ToString();
string db_name = Environment.GetEnvironmentVariable("DB_DATABASE").ToString();
string db_username = Environment.GetEnvironmentVariable("DB_USERNAME").ToString();
string db_password = Environment.GetEnvironmentVariable("DB_PASSWORD").ToString();

string db_setting = String.Format("Host={0}; Port={1}; Username={2}; Password={3}; Database={4};",host, port, db_username, db_password, db_name);

我确信数据库的端口,IP等没有错误,因为它们在其他Docker容器中使用。我得到的错误:

System.InvalidOperationException: An exception has been raised that is likely due to a transient failure.
       ---> Npgsql.NpgsqlException (0x80004005): Exception while connecting
       ---> System.Net.Sockets.SocketException (111): Connection refused

他们的文件错误点我是数据库查询。

rqenqsqc

rqenqsqc1#

问题解决了。显然,数据库端口已经改变了。我觉得这很奇怪,因为我有另一个应用程序正在使用与旧端口相同的数据库,它工作得很好。

bxfogqkk

bxfogqkk2#

尝试更新以下代码段:

string db_setting = String.Format("Host={0}; Port={1}; Username={2}; Password={3}; Database={4};",host, port, db_username, db_password, db_name);

string db_setting = String.Format("Host={0}; Port={1}; User Id={2}; Password={3}; Database={4};",host, port, db_username, db_password, db_name);
exdqitrt

exdqitrt3#

我想补充的是,这个错误并不总是一个重试错误.在我的情况下,我正在动态更改数据库的连接字符串,我给了一个不正确的数据库名称,一个不存在的数据库,我收到了这个错误.我正在处理一个应用程序,c# EF核心,.net 7.

相关问题