【发布时间】:2020-01-20 12:51:06
【问题描述】:
我在从堆栈中运行的 docker 容器内部连接到现有远程 MSSQL 数据库时遇到问题。
- 我的应用程序由三个模块(后端、前端和 haproxy)组成
- 后端模块是用 Java 编写的(SpringBoot 应用程序),它也是需要连接远程 MSSQL 数据库的模块(远程我的意思是放置在不同的服务器上,与 docker 部分分开)。
- 我有以下 docker compose 文件:
-
我使用以下命令启动堆栈:
docker stack deploy -c docker-compose.yml myapp 结果是,所有容器都启动并运行,但是spring app报告连接DB超时:
服务器似乎配置正确,我可以通过 telnet 从容器访问主机。
当独立运行(甚至从 docker 容器)时,后端应用程序能够毫无问题地连接到数据库,而与 docker-compose 堆叠时,它无法连接到同一个数据库。
我也尝试提供数据库服务器 IP 而不是主机名 - 没有成功。
也许在 docker compose 中设置网络部分可以解决问题?
【问题讨论】:
-
mssql 实例在 docker 之外运行?
-
是的。这是一个单独的服务器。
-
服务器的 IP 是否正确?你如何以及在哪里运行它?因为它看起来像一个内部(网络)IP,而不是一个全局 IP。当您堆叠 docker 应用程序时,它会获得自己的内部网络,从而导致 10.x.x.x 等 IP 地址指向其他容器,这可能是您的应用程序找不到远程 mssql 服务器的原因。
-
是的,IP 是正确的。它作为内部企业基础设施的一部分工作。有没有办法避免这些冲突?
标签: java sql-server docker docker-compose docker-networking