You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker容器中C# Web Api无法连接同网络Postgres数据库求助

Docker容器间Postgres连接被拒绝故障排查

问题背景

Linux服务器上部署两个Docker容器:Postgres数据库容器和C# Web API容器,已加入自定义shared-network网络。Web API使用容器名postgres-database连接,但报错:

Unhandled exception. Npgsql.NpgsqlException (0x80004005): Failed to connect to 172.18.0.5:62451
---> System.Net.Sockets.SocketException (111): Connection refused

已确认DNS解析正常(IP和端口正确),外部通过端口映射可正常连接Postgres,且已设置listen_addresses='*'、修改pg_hba.conf允许172.18.0.1/16网段访问并重启容器。

启动命令:

docker run --name postgres-database -e POSTGRES_PASSWORD=PASSWORD --network shared-network -p 62451:5432 -d postgres -c listen_addresses=*
docker run -p 12345:80 -d --name my-api --network shared-network my-api

可能的故障原因及解决步骤

1. 连接字符串错误使用宿主机映射端口

容器在自定义网络内通信时,必须使用Postgres容器的内部端口5432,而非宿主机映射的62451。报错显示连接的是62451,说明Web API的连接字符串端口配置错误。

  • 修正连接字符串,确保端口为5432,示例:
    Host=postgres-database;Port=5432;Database=your_db;Username=postgres;Password=PASSWORD
    

2. pg_hba.conf配置未真正生效

直接修改容器内的pg_hba.conf会在容器重启后被官方Postgres镜像的初始化配置覆盖,导致设置无效。正确做法:

  • 挂载本地修改好的pg_hba.conf到容器:
    docker run --name postgres-database -e POSTGRES_PASSWORD=PASSWORD --network shared-network -p 62451:5432 -v /path/to/your/pg_hba.conf:/var/lib/postgresql/data/pg_hba.conf -d postgres -c listen_addresses=*
    
  • 测试阶段可临时使用环境变量放宽权限(生产环境禁用):
    docker run --name postgres-database -e POSTGRES_PASSWORD=PASSWORD -e POSTGRES_HOST_AUTH_METHOD=trust --network shared-network -p 62451:5432 -d postgres -c listen_addresses=*
    

3. 容器启动顺序导致连接时机过早

Web API容器先于Postgres启动时,Postgres尚未完成初始化,会触发连接拒绝。解决方式:

  • 使用Docker Compose的depends_on配置,确保Postgres启动后再启动Web API;
  • 在Web API代码中添加连接重试逻辑(比如用Polly库实现);
  • 手动先启动Postgres容器,等待10-15秒再启动Web API容器。

4. 自定义网络网段与pg_hba.conf不匹配

检查自定义网络的实际网段:

docker network inspect shared-network

查看Subnet字段,若实际网段不是172.18.0.0/16,需更新pg_hba.conf中的对应网段配置。

5. Postgres容器未正常启动

查看Postgres容器日志确认服务状态:

docker logs postgres-database

若日志中出现database system is ready to accept connections则启动正常;若有错误(如权限问题、磁盘空间不足),需针对性修复。

内容的提问来源于stack exchange,提问作者Glover

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 02:35:18