Docker Compose运行API时出现getaddrinfo EAI_AGAIN错误,无法连接PostgreSQL
解决Docker Compose中API连接PostgreSQL的getaddrinfo EAI_AGAIN错误
核心问题:数据库连接配置错误
你的API连接代码中,host参数错误使用了完整连接字符串格式(postgres://db:5432),但pg.Pool的host字段仅需填写数据库主机地址(服务名/IP),这种格式错误导致DNS解析失败,触发getaddrinfo EAI_AGAIN错误。
修正方案
方案1:拆分连接参数(推荐)
将连接信息拆分为pg.Pool要求的独立参数:
const client = new pg.Pool({ host: 'db', // 使用docker-compose中定义的db服务名,同一网络下可直接解析 port: 5432, // PostgreSQL默认端口 user: 'postgres', password: 'mypassword', database: 'docker' });
方案2:使用完整连接字符串
如果偏好使用连接字符串,需改用connectionString参数,而非host:
const client = new pg.Pool({ connectionString: 'postgres://postgres:mypassword@db:5432/docker' });
额外检查点
- 确认PostgreSQL服务就绪:
depends_on仅保证db容器启动顺序,但不确保PostgreSQL服务完成初始化。执行docker-compose logs db查看日志,确认出现database system is ready to accept connections字样。 - 添加连接重试逻辑:API启动时可能PostgreSQL尚未就绪,建议在代码中添加连接重试机制,避免一次性启动失败。
- 验证网络连通性:进入API容器执行
ping db,确认能正常解析并访问db服务:docker exec -it node-container ping db
内容的提问来源于stack exchange,提问作者victor-freitas
相关产品推荐
相关产品推荐

