我试图从运行.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
他们的文件错误点我是数据库查询。
3条答案
按热度按时间rqenqsqc1#
问题解决了。显然,数据库端口已经改变了。我觉得这很奇怪,因为我有另一个应用程序正在使用与旧端口相同的数据库,它工作得很好。
bxfogqkk2#
尝试更新以下代码段:
到
exdqitrt3#
我想补充的是,这个错误并不总是一个重试错误.在我的情况下,我正在动态更改数据库的连接字符串,我给了一个不正确的数据库名称,一个不存在的数据库,我收到了这个错误.我正在处理一个应用程序,c# EF核心,.net 7.