Docker Compose中Go应用容器无法连接MSSQL容器问题排查
问题排查与解决
核心问题:容器间通信地址用错了
Go应用容器里用localhost/127.0.0.1连接数据库是错误的——每个Docker容器都有独立的网络栈,localhost指向容器自身,而非MSSQL容器。Docker Compose会自动为创建的服务分配DNS解析,直接用**服务名mssql**作为数据库连接地址即可。
额外注意:启动顺序不代表服务就绪
depends_on仅能保证MSSQL容器先于Go应用启动,但不保证SQL Server服务已经完全初始化完成、可以接受连接。虽然你的初始化脚本有重试逻辑,但Go应用启动时数据库可能还没准备好,建议在Go代码中添加数据库连接重试逻辑,循环尝试连接直到成功,再继续启动服务。
具体修改点
- 修正数据库连接字符串:把Go代码里的数据库地址从
localhost/127.0.0.1替换成mssql,端口保持1433。示例连接字符串:
server=mssql;port=1433;user id=sa;password=Yukon_900;database=PlanningPoker;encrypt=disable
(如果启用了加密,需要调整对应配置,否则可能连接失败)
验证容器间网络连通性:可以进入Go应用容器执行
ping mssql或telnet mssql 1433,确认能正常访问MSSQL服务,再调试应用连接问题。可选:优化启动等待逻辑:如果需要更可靠的启动依赖,可以使用
wait-for-it.sh这类工具,在Go应用启动前等待mssql:1433端口就绪,避免因数据库未初始化完成导致的连接失败。
内容的提问来源于stack exchange,提问作者philomelka
相关产品推荐
相关产品推荐

