无法从堆叠 docker 容器连接到远程 MSSQL 数据库

Cannot connect to remote MSSQL database from stacked docker container

我在从堆栈中的 docker 容器 运行 连接到现有远程 MSSQL 数据库时遇到问题。

  1. 我的应用程序包含三个模块(后端、前端和 haproxy)
  2. 后端模块是用 Java(SpringBoot 应用程序)编写的,它也是需要连接远程 MSSQL 数据库的模块(远程我的意思是放在不同的服务器上,与 docker 部分分开).
  3. 我有以下 docker 撰写文件:

  1. 我使用以下命令启动堆栈:

    docker stack deploy -c docker-compose.yml myapp
    
  2. 结果是,所有容器都启动了,运行,但是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