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

时间:2018-06-18 15:57:32

标签: java sql-server docker docker-compose docker-networking

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

  1. 我的应用程序包含三个模块(后端,前端和haproxy)
  2. 后端模块是用Java编写的(SpringBoot应用程序),它也是需要连接的远程MSSQL数据库(通过远程我的意思是放在不同的服务器上,独立于docker部分)。
  3. 我有以下docker compose文件:
  4. enter image description here

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

      docker stack deploy -c docker-compose.yml myapp
      
    2. 结果是,所有容器都已启动并运行,但是spring应用程序报告与DB的连接已超时:

    3. enter image description here

      服务器似乎配置正确,我能够通过telnet从容器访问主机。

      当独立运行时(甚至从docker容器)后端应用程序能够毫无问题地连接到数据库,而堆叠了docker-compose但是它无法连接到同一个数据库。

      我还试图提供数据库服务器IP而不是主机名 - 没有成功。

      也许在docker compose中设置网络部分可以解决问题吗?

2 个答案:

答案 0 :(得分:0)

<强>更新

您可以做的另一件事是使用host.docker.internal而不是数据库的IP地址。这个 ONLY 适用于windows的docker或mac的docker。

来源: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"

参考:Use host networking

答案 1 :(得分:0)

该问题似乎是由网络重叠引起的。

添加如下所示配置的网络,允许连接到我的远程数据库并使端点隐藏:

networks:
    backend:
        ipam:
            driver: default
            config:
                - subnet: 192.168.40.0/26