docker-compose部署时Node.js容器无法连接Microsoft SQL Server报错如何解决
问题原因
API容器内的localhost指向的是API容器自身的网络命名空间,而非宿主机器或者MSSQL容器,所以配置localhost:1433无法连接到数据库服务。
解决方案
1. 修改数据库连接配置
Docker Compose 同自定义网络下的容器,可以直接用docker-compose.yml中定义的服务名作为主机名互相访问。你当前配置里数据库的服务名为db,所以直接修改ormconfig.json中的数据库host配置:
- 把
host字段值从localhost改为db - 端口保持
1433不变,用户名填sa,密码填你配置的Abc123**
修改后的ormconfig.json示例:
{ "type": "mssql", "host": "db", "port": 1433, "username": "sa", "password": "Abc123**", "database": "你的业务数据库名称", // 其余原有配置保持不变 }
补充说明:如果你是在宿主机本地直接调试NodeJS服务(不运行在容器内),才需要使用
localhost作为数据库主机地址。
2. 优化启动顺序(可选)
当前配置的depends_on只会控制容器的启动顺序,不会等待MSSQL完全初始化完成再启动API,首次启动可能出现API先启动、数据库还没就绪导致连接失败的问题,你可以选择以下任意一种方式优化:
- 在NodeJS代码中增加数据库连接重试逻辑,失败后间隔几秒重试
- 给API容器增加启动等待脚本,等
db:1433端口可访问后再启动NodeJS服务
3. 重启服务生效
修改配置后执行以下命令重启服务即可:
docker-compose down && docker-compose up --build
内容的提问来源于stack exchange,提问作者Hamza Ince
相关产品推荐
相关产品推荐

