无法从堆叠 docker 容器连接到远程 MSSQL 数据库
Cannot connect to remote MSSQL database from stacked docker container
我在从堆栈中的 docker 容器 运行 连接到现有远程 MSSQL 数据库时遇到问题。
- 我的应用程序包含三个模块(后端、前端和 haproxy)
- 后端模块是用 Java(SpringBoot 应用程序)编写的,它也是需要连接远程 MSSQL 数据库的模块(远程我的意思是放在不同的服务器上,与 docker 部分分开).
- 我有以下 docker 撰写文件:
我使用以下命令启动堆栈:
docker stack deploy -c docker-compose.yml myapp
结果是,所有容器都启动了,运行,但是spring应用程序报告连接数据库超时:
服务器似乎配置正确,我可以通过telnet从容器访问主机。
当 运行 独立时(甚至来自 docker 容器)后端应用程序能够毫无问题地连接到数据库,而与 docker-compose 堆叠时却无法连接到完全相同的数据库。
我也尝试提供数据库服务器 IP 而不是主机名 - 没有成功。
也许在 docker compose 中设置网络部分可以解决问题?
更新
您可以做的另一件事是使用 host.docker.internal
而不是数据库的 IP 地址。此 仅 适用于 docker for windows 或 docker for mac。
来源:I want to connect from a container to a service on the host
OLD,仅在不处于集群模式时有效
需要指定docker与主机使用同一网络,可以通过以下方式实现:
version: '3'
services:
web-app:
build:
dockerfile: web-app/something
ports:
- 8080:8080
network_mode: "host"
参考:使用主机网络
看来问题是由网络重叠引起的。
添加如下所示配置的网络,允许连接到我的远程数据库并隐藏我的端点:
networks:
backend:
ipam:
driver: default
config:
- subnet: 192.168.40.0/26
我在从堆栈中的 docker 容器 运行 连接到现有远程 MSSQL 数据库时遇到问题。
- 我的应用程序包含三个模块(后端、前端和 haproxy)
- 后端模块是用 Java(SpringBoot 应用程序)编写的,它也是需要连接远程 MSSQL 数据库的模块(远程我的意思是放在不同的服务器上,与 docker 部分分开).
- 我有以下 docker 撰写文件:
我使用以下命令启动堆栈:
docker stack deploy -c docker-compose.yml myapp
结果是,所有容器都启动了,运行,但是spring应用程序报告连接数据库超时:
服务器似乎配置正确,我可以通过telnet从容器访问主机。
当 运行 独立时(甚至来自 docker 容器)后端应用程序能够毫无问题地连接到数据库,而与 docker-compose 堆叠时却无法连接到完全相同的数据库。
我也尝试提供数据库服务器 IP 而不是主机名 - 没有成功。
也许在 docker compose 中设置网络部分可以解决问题?
更新
您可以做的另一件事是使用 host.docker.internal
而不是数据库的 IP 地址。此 仅 适用于 docker for windows 或 docker for mac。
来源:I want to connect from a container to a service on the host
OLD,仅在不处于集群模式时有效
需要指定docker与主机使用同一网络,可以通过以下方式实现:
version: '3'
services:
web-app:
build:
dockerfile: web-app/something
ports:
- 8080:8080
network_mode: "host"
参考:使用主机网络
看来问题是由网络重叠引起的。
添加如下所示配置的网络,允许连接到我的远程数据库并隐藏我的端点:
networks:
backend:
ipam:
driver: default
config:
- subnet: 192.168.40.0/26