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

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

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

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

  • enter image description here
  • 我使用以下命令启动堆栈:
    docker stack deploy -c docker-compose.yml myapp
    
  • 结果是,所有容器都启动并运行,但 spring app 报告与 DB 的连接超时:

  • enter image description here

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

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

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

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

    最佳答案

    更新

    您可以做的另一件事是使用 host.docker.internal而不是数据库的IP地址。这个仅限 适用于 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

    关于java - 无法从堆叠的 docker 容器连接到远程 MSSQL 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50913335/

    相关文章:

    java - REST @FormParam 值为空

    java - Izpack 安装程序 - 更改窗口标题和页脚

    sql-server - 让 IIS 在内网环境中模拟 Windows 用户访问 SQL Server

    python - 域名下划线的问题

    java - 如何生成带有时间戳的单独测试输出文件夹?

    sql - 搜索表 - 如果找到结果,则不要搜索下一个表

    SQL Server TOP(1) 具有不同的

    ssl - 在非交互模式下使用 "letsencrypt certonly"生成新的(未更新的)SSL 证书

    postgresql - Docker Compose (TOMCAT + POSTGRES) - Spring Boot 应用程序 : connection issue between containers

    java - Vertx 应用程序不会通过命令停止